隐式映射到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) }