给定输入(映射键:值)
"a":["e","c","d"]
"b":["c"]
所需的排序输出:
"a,c"
"a,d"
"a,e"
"b,c"
您可能要寻找的是使用具有某种值的flatmap,以将转换的整数值比较为:
return map.entrySet().stream()
.flatMap(e -> e.getValue().stream()
.sorted(Comparator.comparingInt(Integer::parseInt)) // or just .sorted()
.map(v -> e.getKey() + "," + v))
.collect(Collectors.toList());
要保持此可读性,最好以两种方法将代码拆分,因此您不会嵌入flatMap
逻辑:
public List<String> toPairs(Map<String, Set<String> map) {
return map.entrySet().stream()
.flatMap(this::entryPairs)
.sorted() // if you want the whole output to be sorted
.collect(Collectors.toList())
}
private Stream<String> entryPairs(Map.Entry<String, Set<String>> entry) {
return entry.getValue().stream()
// .sorted() // you can sort the values for each key here, but this is useless if you're sorting above
.map(v -> entry.getKey() + ',' + v)
}
不确定它是否是一个完美的解决方案,但它正在起作用。
map.entrySet().stream()
.map(entry.getValue().stream()
.sorted()
.map(value->entry.getKey()+","+value)
.collect(Collectors.joining("n"))
)
.sorted()
.collect(Collectors.joining("n"));