如何在Java8中将Map的Stream转换为TreeMap

4
我有一个方法,它接受一组map的流,应该返回一个TreeMap。
public TreeMap<String, String> buildTreeMap(Stream<Map<String, String>> inStream) {
   return stream.collect(toMap(???));
}

如何使其返回TreeMap?


抱歉没有表述清楚,这个方法应该返回一个TreeMap。我已经更新了问题。 - tintin
5
返回类型 TreeMap<Stream, Stream> 没有意义... - Holger
2个回答

7
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));

4
值得一提的是,这种情况下会简单地覆盖重复键的值。 - Holger

5
如果您正在使用 groupingBy
 stream()
   .collect(
      Collectors.groupingBy(
        e -> e.hashCode(), TreeMap::new, Collectors.toList()))

其中e -> e.hashCode是类似于Entry::getKeyStudent::getId的关键函数,Collectors.toList()downstream,即在树映射中需要哪种数据类型作为

这将得到TreeMap<Integer, List>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接