我在for和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

重构代码:

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

流有什么问题?

Sotirios Delimanolis

假设createLine添加到pool,这

.orElse(createLine(color));

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

您可能正在寻找orElseGet带有的Supplier调用createLine(color)

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我在无穷循环代码中有不同的结果

为什么 regExp 在不同的场景中有不同的结果?

为什么javascript和python中有不同的正则表达式结果?

为什么我在状态和索引中有不同的文档计数?

为什么我在cronjob和直接cmd调用中有不同的Path(os.getcwd())行为?

为什么我们在 Anaconda 中有不同的环境?

为什么我的结果在ag和grep之间似乎有所不同?

Perl:为什么for和foreach给我不同的结果?

为什么append和concat给我不同的结果?

为什么我有不同的结果转换文本翻倍

为什么有和没有 * 在 Bash 中有所不同

(a|b)* 关于 Alternation 的例子,我很困惑,为什么结果集中有 ab、ba?

为什么我的图标在ios13中有不同的行为

为什么我的枚举定义在类视图中有不同的图标?

为什么我得到不同的结果?

为什么_token和XSRF-TOKEN在Laravel中有所不同?

为什么小数值的反t分布在Matlab和R中有所不同?

为什么pop_back()方法在vector和list类中有所不同?

为什么sum和lambda sum在转换中有所不同?

为什么文件系统在“ df”和“ fstab”中有所不同?

为什么不是和!在MySQL 5中有不同的运算符优先级?

为什么 split 和 join 结果不同?

为什么for和while循环的结果不同?

为什么cpu和gpu的结果不同?

为什么在if和else块的内部和外部使用return会给我不同的结果?

为什么列表索引有不同的结果?

为什么我的lein重新框架模板中有clj和cljs文件夹?

为什么我们在Ruby中有0.0和-0.0?

为什么我的系统中有这么长的用户和组列表?