使用流将Map <string,set <string >>展平为List <string>(CSV转换)

时间:2019-03-14 17:24:05

标签: java java-stream

输入信息(地图键:值)

"a":["e","c","d"]
"b":["c"]

所需的排序输出:

"a,c"
"a,d"
"a,e"
"b,c"

3 个答案:

答案 0 :(得分:1)

您可能正在寻找的是使用flatMap以及经过调整的一种值,以比较转换后的整数值为:

average = sum / 3.0;

答案 1 :(得分:1)

为保持可读性,最好将代码分成两种方法,以免内联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)
}

答案 2 :(得分:0)

不确定这是否是完美的解决方案,但它是否有效。

map.entrySet().stream()
  .map(entry.getValue().stream()
     .sorted()
     .map(value->entry.getKey()+","+value)
     .collect(Collectors.joining("\n"))
  )
  .sorted()
  .collect(Collectors.joining("\n"));