我有 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/