如何确定HashMap中的哪个值给出了真值,然后对此进行了处理?

时间:2018-10-25 15:14:09

标签: java lambda

我用Java编写了一个lambda表达式,该表达式从LinkedHashMap中获取键和值(键和值都是自定义对象)。 Lambda表达式采用键(包含字符串名称)和值(这是一个条件,可以是win,loose或draw和enum类型的值),然后将键和值与预设条件(win,loose或win)进行比较绘制,再次为枚举类型)。如果该值与预设条件相同,则返回布尔值true,否则返回false。

`for (Wedstrijd wedstrijd : wedstrijden)    

wedstrijd.getVoorspelling()
                        .forEach((key, value) -> System.out.println("User: " + key + " guessed " + value.equals(wedstrijd.getUitslag())));

这可以按我希望的方式工作并返回,例如(控制台输出):

The Preset condition is:
WIN

User
"David: guessed" true
"Andrew: guessed" false

现在,我想给用户评分,如果他们猜对了。因此,如果布尔值为true。每当for每个循环运行时,都需要发生这种情况。 我整天待在这里,我想不出办法来解决这个问题。 使用我较早编写的lambda是否可以实现?还是我需要为此建立一个单独的方法?如果是这样,我将如何处理?

2 个答案:

答案 0 :(得分:0)

wedstrijd.getVoorspelling()
    .forEach((key, value) -> {
        boolean matches = value.equals(wedstrijd.getUitslag();
        System.out.printf("User: %s guessed %s%n", key, matches));
        if (matches) {
            ... give points
        }
     });

我认为问题出在新的语法变体上。代替System.println(...),可以添加{ ... }

答案 1 :(得分:0)

您可以执行以下操作

wedstrijd.getVoorspelling()
                        .forEach((key, value) -> {
     many statements as mentioned above
}));

wedstrijd.getVoorspelling()
                        .forEach((key, value) -> anotherMethod(key,value)        
));

anotherMethod(key,value){
   logic here
}