拥有下一张原始地图:
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
和的功能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()));
问题内容: Stream >> sorted = index.entrySet().stream() .sorted(Map.Entry.comparingByValue()); 类型中的方法不适用于参数 我想根据作为的值的列表对a进行排序。如何使用Java 8中的Stream库实现此目的? 问题答案: 这可能对您有帮助。 我将结果映射的类型更改为 LinkedHashMap 以遵守插入顺序。
问题内容: 我有一个这样的: 我想根据列表值的大小按升序对地图进行排序。我怎样才能做到这一点? 在这种情况下,我希望订购加拿大,印度,美国的钥匙。 问题答案: 没有可保证的迭代顺序,因此您需要收集到一个才能使排序有意义。 之所以引发,是因为合并器功能仅用于并行流],而我们并未使用。 如果您觉得可读性更好,也可以使用:
我正在用libgdx制作一个自上而下的迷宫游戏,我使用extendViewport来渲染游戏相机。我有点困惑,我将如何着手创建一个小地图。我应该为小地图创建一个额外的视口和照相机吗?我对整个视口/摄影机还是新手。谢谢
我试图在Java创建一个地图,但失败了。 它告诉我在行的末尾需要或,但是,当我尝试其中一个时,我会收到错误。 将告诉我“映射是抽象的;无法实例化” 将告诉我“应为数组初始值设定项” 我对编码还不太熟悉,所以请对我友好一点,多多忍耐:)
问题内容: 我想用字符串键和struct值构建一个映射,通过它我可以更新由map key标识的映射中的struct值。 我已经尝试过了,这并没有给我想要的输出。 我真正想要的是: 问题答案: 您无法更改与地图中的键关联的值,只能重新分配值。 这给您2种可能性: 将指针存储在地图中,因此您可以修改 指向的 对象(不在地图数据结构内部)。 存储结构值,但是在修改它时,需要将其重新分配给键。 1.使用指