Kotlin 将'List
在列表上执行parallelStream之后,我得到了一个列表如果您正在寻找一个等效的Java代码,您可以使用flatMap对所有条目进行流式处理,然后将它们收集为带有合并函数的映射,如下所示:Kotlin 将'List,kotlin,java-stream,reduce,collect,Kotlin,Java Stream,Reduce,Collect,在列表上执行parallelStream之后,我得到了一个列表如果您正在寻找一个等效的Java代码,您可以使用flatMap对所有条目进行流式处理,然后将它们收集为带有合并函数的映射,如下所示: Map<String, Set<String>> some(List<Map<String, Set<String>>> listOfMap) { return listOfMap.stream() .flatM
Map<String, Set<String>> some(List<Map<String, Set<String>>> listOfMap) {
return listOfMap.stream()
.flatMap(a -> a.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(s1, s2) -> {
s1.addAll(s2);
return s1;
}));
}
我想出并实施了一个Kotlin特定的解决方案,即使用折叠操作符而不是减少或收集: 使用fold的一个好处是,我们不需要将数据类型从Map更改为MutableMap并设置为MutableSet
Map<String, Set<String>> some(List<Map<String, Set<String>>> listOfMap) {
return listOfMap.stream()
.flatMap(a -> a.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(s1, s2) -> {
s1.addAll(s2);
return s1;
}));
}
private val TYPES = listOf("string", "integer")
private fun getLinesOfEachTypeAcrossMultipleFiles(files: List<File>): Map<String, Set<String>> {
return files
.map { file ->
TYPES.associate { it to getRelevantTypeLinesFromFile(file) }
}
.fold(mutableMapOf<String, MutableSet<String>>()) { acc, map ->
acc.apply {
map.forEach { key, value ->
acc.getOrPut(key) { mutableSetOf() }.addAll(value)
}
}
}
}
private fun getRelevantTypeLinesFromFile(it: File): Set<String> {
// Sample code
return setOf()
}