当前位置: 首页 > 面试题库 >

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

濮阳弘扬
2023-03-14
问题内容

拥有下一张原始地图:

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.使用指