如何根据现有地图中的值创建新地图

2024-01-23

有下一张原始地图:

G1=[7,8,45,6,9]
G2=[3,9,34,2,1,65]
G3=[6,5,9,1,67,5]

其中 G1、G2 和 G3 是人的年龄组,我如何创建这样的新地图:

45=[7,8,45,6,9]
65=[3,9,34,2,1,65]
67=[6,5,9,1,67,5]

其中新键是每组中人员的最大年龄。

我已经尝试过这个:

Map<Integer, List<Integer>> newMap = originalMap.entrySet().stream()
                .collect(Collectors.toMap(Collections.max(x -> x.getValue()), x -> x.getValue()));

但是编译器告诉我:“这个表达式的目标类型必须是一个函数式接口”在这段代码中:

Collections.max(x -> x.getValue())

对此的任何帮助将不胜感激。


toMap 消耗函数keyMapper and valueMapper。你这样做是正确的valueMapper在你的代码中但不是keyMapper因此你需要包括keyMapper函数如下:

originalMap.entrySet()
           .stream()
           .collect(toMap(e -> Collections.max(e.getValue()), Map.Entry::getValue));

请注意e -> Collections.max(e.getValue()).

此外,由于您不使用映射键,因此可以避免调用entrySet(),而是处理映射值:

originalMap.values()
           .stream()
           .collect(Collectors.toMap(Collections::max, Function.identity()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据现有地图中的值创建新地图 的相关文章

随机推荐