gpt4 book ai didi

java - 比较同一列表的两个列表元素之间的值

转载 作者:行者123 更新时间:2023-11-30 08:00:17 25 4
gpt4 key购买 nike

我需要对以下类型的列表中的值进行比较;

List<org.bson.Document>

数据是一个 Bson 文档,具有两个键:值对(名称和分数)。我需要遍历这个列表并删除每个高尔夫球手取得的最低分数。因此,如果 Joe 打了两场比赛,第一场比赛他得分 72,第二场比赛他得分 86,因为这是高尔夫,86 是两个得分中较低的一个,我需要从列表中删除具有得分的元素86. 然后,这将为每个高尔夫球手留下两个中较高的一个,然后让我只比较高分(较低的数值)。

使用 Java 1.8 的任何新功能执行此操作的最佳方法是什么,或者我是否必须复制列表,然后将列表 A 中的元素 x 与列表 B 中的元素 x+1 进行比较(正确排序后)而名字是平等的?

最佳答案

我不熟悉 bson,所以我尝试获取名称流,分数条目是这样的:

List<org.bson.Document> ldoc = new ArrayList<>();
Stream<Entry<String, Integer>> s
= ldoc.stream()
.flatMap(d -> d.entrySet().stream())
.map(e -> new AbstractMap.SimpleImmutableEntry<String,Integer>(e.getKey(),((Integer)e.getValue())));

我直接从列表创建了流。

List<Entry<String, Integer>> l = new ArrayList<>();
l.add(new AbstractMap.SimpleImmutableEntry<>("Joe", 72));
l.add(new AbstractMap.SimpleImmutableEntry<>("Joe", 66));
l.add(new AbstractMap.SimpleImmutableEntry<>("John", 73));
l.add(new AbstractMap.SimpleImmutableEntry<>("John", 86));
l.add(new AbstractMap.SimpleImmutableEntry<>("John", 99));

可以在同一个流中进行分组和最小化,如下所示:

Map<String, Optional<Integer>> m = l.stream()
.collect(Collectors.groupingBy(e -> e.getKey(),
Collectors.mapping(e -> e.getValue(),
Collectors.minBy((i1, i2) -> Integer.compare(i1, i2)))));
System.out.println("m = " + m);

这会产生输出:

m = {Joe=Optional[66], John=Optional[73]}

这是一张按名字列出每个玩家最低分数的 map 。

要获得获胜者:

String winner = m.entrySet()
.stream()
.min((e1, e2) -> Integer.compare(e1.getValue().get(), e2.getValue().get()))
.get().getKey();
System.out.println("winner = " + winner);

打印内容:

winner = Joe

关于java - 比较同一列表的两个列表元素之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com