gpt4 book ai didi

java8 使用累加器和组合器减少流

转载 作者:行者123 更新时间:2023-12-01 19:27:48 26 4
gpt4 key购买 nike

我正在尝试编写一个简单的reduce函数,它将检查是否包含 srcList 的所有元素存在于 targetList :

List<String> srcList = Arrays.asList("a", "b");
List<String> targetList = Collections.singletonList("a");

Boolean result = srcList.stream().reduce(true
, (prevResult, srcElement) -> targetList.contains(srcElement)
, (prevResult, currentResult) -> prevResult && currentResult);

System.out.println(result); // prints false as expected

上面提到的 lambda 似乎没有按预期工作。例如,如果我们更改目标列表中的元素,结果将打印为 true:

List<String> srcList = Arrays.asList("a", "b");
List<String> targetList = Collections.singletonList("b");

Boolean result = srcList.stream().reduce(true
, (prevResult, srcElement) -> targetList.contains(srcElement)
, (prevResult, currentResult) -> prevResult && currentResult);

System.out.println(result); // prints true

看起来该表达式返回了最后一个 accumulator 的结果仅评估(即本例中的 contains 操作)并且组合器不执行 &&关于所有结果。

有人可以解释一下吗?

最佳答案

问题是您忽略了累加器中的 prevResult:

(prevResult, srcElement) -> targetList.contains(srcElement)

应该是,例如

(prevResult, srcElement) -> prevResult && targetList.contains(srcElement)
<小时/>

但老实说,使用 containsAll 会更容易:

targetList.containsAll(srcList)

关于java8 使用累加器和组合器减少流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60977121/

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