早上好,
很抱歉,如果这已经被问到了,但我正在构建一个java项目。
它是一个程序,允许用户插入投注(例如体育比赛的预测结果),并在以后允许用户插入所述比赛的最终结果。
这是由2个LinkedHashMaps完成的。一个键值对用户和预测分数,一个键值对用户和最终分数。
两个 LinkedHashMap 中键的顺序将与它们从另一个带有用户名称的数组获取键输入的顺序相同。因此,每次都只设置预测的和确定的分数。(通过在数组上调用包含用户名称的 .get 来设置密钥)。
我想做的是将LinkedHashMap中的值与预测分数进行比较,将其与LinkedHash Map中具有最终分数的值进行比较。然而,这需要按键值对进行比较。所以我不能只检查两个LinkedHashMaps的相等性。例如,对于四个用户,只有一个用户可以预测正确的分数。如果我检查两个LinkedHashMaps与另一个的相等性,它会检查整个键值对。我需要为每个键值对获取一个布尔结果。
我想过检查值的索引的相等性,但这不是LinkedHashMaps的工作方式。“链接”映射键和“链接哈希映射”值都是自定义对象(键是包含设置字符串的类的实例,值是枚举)。
我该怎么做呢?
我目前正在考虑首先调用. toArray在每个“索引”位置的LinedHashMap上,并检查该位置与设定数量的相等性…就像这样;(voorspellingen是LinkedHashMap 1,uitslagen是另一个LinkedHashMap)
voorspellingen.keySet().toArray()[0])
uitslagen.keySet().toArray()[0])
if (etc.)
但我不确定这是否是最“有效”的方式......
我会放一张地图,而不是两张以对象形式显示值的地图。但这里的代价是,我们将失去否定价值的顺序。
import java.util.LinkedHashMap;
public class CompareTwoBets {
public static void main(String[] args) {
LinkedHashMap<String, Bet> map = new LinkedHashMap<>();
// First the users add prediction
map.put("jack", new Bet(1));
map.put("Bronwen", new Bet(2));
map.put("Cyrus", new Bet(2));
map.put("Brent", new Bet(5));
// now the users key in the definitive value
Bet bet = map.get("jack");
bet.setDefinitive(5);
map.put("jack", bet);
bet = map.get("Bronwen");
bet.setDefinitive(5);
map.put("Bronwen", bet);
bet = map.get("Cyrus");
bet.setDefinitive(5);
map.put("Cyrus", bet);
bet = map.get("Brent");
bet.setDefinitive(5);
map.put("Brent", bet);
System.out.println(map);
// process to know who put the bet accurately
map.forEach((user, x) -> {
if(x.definitive == x.predicted) {
System.out.println("User " + user +" predicted accurately." );
}
else {
System.out.println("User " + user +" predicted wrongly." );
}
});
}
}
public class User{
String firstName;
String lastName;
public User(String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
}
public class Bet {
int predicted;
int definitive;
public Bet(int predicted) {
this.predicted = predicted;
}
public void setDefinitive(int definitive) {
this.definitive = definitive;
}
}
我建议只使用一个HashMap,对于该值,请使用同时包含这两个结果的对象。
class Results
{
int res1;
int res2;
}
使用上面的类作为值类,因此只需在HashMap上迭代一次,以比较对象中的两个结果是否相等。
有很多方法可以做到这一点,但可能最清晰的方法是迭代一个地图的关键集:
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,但是如果你有数百万用户,那么将预测和结果分组到同一个对象中可能确实更好。
我有一个散列表 这是我的代码 我应该对我的代码做什么样的修改来确保它能按照我的要求编译和运行?
我有一个HashMap,一个键作为某个类的对象,一个值作为另一个HashMap,它的键是一个字符串,值是一个双倍: 我需要一个循环,将键(对象)和值(HashMaps)添加到这个HashMap,但我不能在循环中创建一个新的HashMap变量作为它的值。本质上,每个MyClass对象都必须具有具有相应Double的Strings。 这可能吗?这有什么意义吗??
下面是我试过的那段代码;也给出了输出。 我的问题是:我在
我想添加每个扇区的不同工作者值,但将该值乘以另一个键:value属性。这是一个vue.js组合API WebApp。
问题内容: Python如何将多个变量与一个值进行比较?,例如: 我希望返回一个列表: 问题答案: 方法1 方法2 使用元组或列表 方法3 最好是使用set集合
问题内容: 我需要比较两个缓冲图像,看它们是否完全相同。只是说那等于是行不通的。我目前的方法是 但这并不能真正起作用。还有什么其他更可靠的方法? 问题答案: 显而易见的解决方案是逐像素比较它们是否相同。