我有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
带有的Supplier
调用createLine(color)
。
orElseGet(() -> createLine(color));
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句