gpt4 book ai didi

java - 我在 for 和 stream 中有不同的结果,为什么?

转载 作者:行者123 更新时间:2023-11-29 10:13:17 25 4
gpt4 key购买 nike

我有 Flyweight 模式,我尝试将循环转换为流,但结果不同:

public Line getLine(Color color) {
for(Line line: pool) {
if(line.getColor().equals(color)) {
return line;
}
}
return createLine(color);
}

factory.getLine(Color.RED);
factory.getLine(Color.RED);
System.out.println(getPool().size()); // print 1

重构代码:

public Line getLine(Color color) {
return pool.stream()
.filter(l -> l.getColor().equals(color))
.findFirst()
.orElse(createLine(color));
}

factory.getLine(Color.RED);
factory.getLine(Color.RED);
System.out.println(getPool().size()); // print 2

流有什么问题?

最佳答案

假设 createLine 添加到 pool,这

.orElse(createLine(color));

首先调用 createLine(color),然后将结果传递给被调用的 orElse(T)

您可能正在寻找 orElseGet与将调用 createLine(color)Supplier

orElseGet(() -> createLine(color));

关于java - 我在 for 和 stream 中有不同的结果,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25916821/

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