在我映射一个Set之后,我必须将它显式地转换回Set.例如:
fun getNewSet(oldSet: Set<String>): Set<String> {
return oldSet
.map{ getNewStringFromOld(it) }
.toSet()
}
Run Code Online (Sandbox Code Playgroud)
在没有明确地将其转换回Set的情况下映射整个集合的正确方法是什么?
Jon*_*ols 15
查看库代码,唯一的另一种方法是调用mapTo
哪个获取目标集合:
oldSet.mapTo(HashSet<String>()) { getNewStringFromOld(id) }
Run Code Online (Sandbox Code Playgroud)
我不确定默认是错的.问题是map
可能以导致非唯一值列表的方式使用.如果有一个特殊版本Set.map()
返回了一个集合,则无法以这种方式使用map - 任何非唯一值都将替换结果中的值.我当然可以看到这样的情况map
应该总是导致一个与源集合大小相同的集合,如果map
创建了一个Set
,那么情况并非总是如此.
如果你经常这样做,也许只需创建自己的扩展功能:
public inline fun <T, R> Iterable<T>.mapToSet(transform: (T) -> R): Set<R> {
return mapTo(HashSet<R>(), transform)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2170 次 |
最近记录: |