And*_*rey 1 java for-loop java-8 java-stream
我有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
Run Code Online (Sandbox Code Playgroud)
重构代码:
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
Run Code Online (Sandbox Code Playgroud)
流有什么问题?
假设createLine增加了pool,这个
.orElse(createLine(color));
Run Code Online (Sandbox Code Playgroud)
首先调用createLine(color),然后传递调用的结果orElse(T).
你可能正在寻找orElseGet一个Supplier会打电话的人createLine(color).
orElseGet(() -> createLine(color));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |