gpt4 book ai didi

java - 如何将一个 HashMap 中的值与另一个 HashMap 中的相同值进行比较?

转载 作者:行者123 更新时间:2023-12-02 10:40:53 25 4
gpt4 key购买 nike

早上好,

很抱歉,如果已经有人问过这个问题,但我陷入了我正在构建的 java 项目中。

该程序允许用户插入投注(例如体育比赛的预测结果),并在稍后允许用户插入所述比赛的最终结果。

这是由 2 个 LinkedHashMap 完成的。一个具有用户和预测分数的键值对,以及用户和最终分数之一。

两个 LinkedHashMap 中键的顺序将相同,因为它们从另一个包含用户名称的数组获取键的输入。因此每次只设置预测分数和最终分数。 (通过使用用户名对数组调用 .get 来设置键)。

我想要做的是将 LinkedHashMap 中的值与预测分数与 LinkedHashMap 中的值与最终分数进行比较。然而,这需要对每个键值对进行比较。所以我不能只检查两个 LinkedHashMap 的相等性。例如,有四个用户时,只有一个可以预测出正确的分数。如果我检查两个 LinkedHashMap 与另一个 LinkedHashMap 的相等性,它将检查整个键值对。我需要为每个键值对获取一个 boolean 结果。

我想检查值的索引位置的相等性,但这不是 LinkedHashMap 的工作方式。 LinkedHashMap Key 和 LinkedHashMap value 都是自定义对象(键是其中包含设置字符串的类的实例,值是枚举)。

我该如何去做呢?

我目前正在考虑首先在每个“索引”位置的两个 LinedHashMap 上调用 .toArray 并检查该位置与设定数量的相等性..像这样; (voorspellingen 是 LinkedHashMap 1,uitslagen 是另一个 LinkedHashMap)

voorspellingen.keySet().toArray()[0])
uitslagen.keySet().toArray()[0])
if (etc.)

但我不确定这是否是最“有效”的方法......

最佳答案

有很多方法可以做到这一点,但最清晰的可能是迭代一个映射的键集:

    var voorspellingen = new LinkedHashMap<String, Integer>(); //ex: <user name, predicted score difference>
var uitslagen = new LinkedHashMap<String, Integer>();

//... add data to maps here

//Let's get a list of the users that gave good predictions
Predicate<String> correctPrediction = name -> (uitslagen.get(name) != null
&& uitslagen.get(name).equals(voorspellingen.get(name)));
List<String> correctUsers = uitslagen.keySet().stream()
.filter(correctPrediction)
.collect(Collectors.toList());

请注意,此解决方案不一定是最快的。我不知道你为什么选择 LinkedHashMap,但如果你有数百万用户,将预测和结果分组在同一个对象中确实可能更好。

关于java - 如何将一个 HashMap 中的值与另一个 HashMap 中的相同值进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52924130/

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