gpt4 book ai didi

java - boolean 值列表的 Java Lambda 表达式中的 XOR

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:06:43 24 4
gpt4 key购买 nike

我开始尝试使用 Labda 表达式来实现 boolean 输入参数列表的 boolean 门。对于“或”和“和”,我写了以下语句:

或:expressions.stream().anyMatch(e -> e.evaluate(input));

AND: expressions.stream().allMatch(e -> e.evaluate(input));

e.evaluate(input) 返回 true 或 false。但是由于没有已经实现的 onceMatch 方法,我只能使用 XOR。

第一个想法是过滤所有真值并检查它是否只有一个:

return expressions.stream().filter(e -> e.evaluate(input) == true).collect(Collectors.counting()) == 1;

但我希望在一个 lambda 表达式中看到它。

最佳答案

如果你想知道是否只有一个匹配,你可以使用

expressions.stream().filter(e -> e.evaluate(input)).limit(2).count() == 1

limit(2) 避免了不必要的处理,因为一旦遇到两个匹配项,您就已经知道结果不可能是==1,而无需计算其他匹配项。

然而,这不是“XOR”逻辑,甚至不是远程。如果你想要异或操作,你可以使用

expressions.stream().map(e -> e.evaluate(input)).reduce((a,b) -> a^b).orElse(Boolean.FALSE)

与 AND 或 OR 不同,异或运算无法短路。

关于java - boolean 值列表的 Java Lambda 表达式中的 XOR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43805436/

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