我用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是否可以实现?还是我需要为此建立一个单独的方法?如果是这样,我将如何处理?
答案 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
}