隐式映射到Kotlin中设置
在通过一个Set映射后,我必须明确地将其转换回Set。 例如:
fun getNewSet(oldSet: Set): Set { return oldSet .map{ getNewStringFromOld(it) } .toSet() }
什么是正确的方式来映射通过该集没有明确地转换回设置?
查看库代码,唯一的方法是调用mapTo
目标集合的mapTo
:
oldSet.mapTo(HashSet()) { getNewStringFromOld(id) }
我不确定默认是错误的。 问题是map
可能会以一种非唯一值列表的方式使用。 如果有一个特殊版本的Set.map()
返回了一个set,那么就不能以这种方式使用map – 任何非唯一值都会替换结果中的值。 我当然可以看到这样的情况: map
应该总是产生一个与源集合大小相同的集合,如果map
创建了一个Set
,情况并非总是如此。
如果您经常这样做,也许只需创建您自己的扩展function:
public inline fun Iterable.mapToSet(transform: (T) -> R): Set { return mapTo(HashSet (), transform) }