如何在Java8中将Map流转换为TreeMap

时间:2015-07-27 18:46:36

标签: java java-8

我有一个方法,它接收一个map of map并且应该返回一个TreeMap

public TreeMap<String, String> buildTreeMap(Stream<Map<String, String>> inStream) {
   return stream.collect(toMap(???));
}

如何让它返回TreeMap?

2 个答案:

答案 0 :(得分:5)

stream.collect(TreeMap::new, TreeMap::putAll, 
    (map1, map2) -> { map1.putAll(map2); return map1; });

...假设您想将所有地图合并为一个大地图。

如果您需要不同的语义来合并同一个键的值,请执行类似

的操作
stream.flatMap(map -> map.entrySet().stream())
   .collect(toMap(
       Entry::getKey, Entry::getValue, (v1, v2) -> merge(v1, v2), TreeMap::new));

答案 1 :(得分:0)

如果你正在使用 groupingBy

 stream()
   .collect(
      Collectors.groupingBy(
        e -> e.hashCode(), TreeMap::new, Collectors.toList()))

其中e -> e.hashCode是关键功能,例如Entry::getKeyStudent::getIdCollectors.toList()downstream 即树形图中需要数据类型

这会产生TreeMap<Integer, List>