【问题标题】:I have different results in for and stream, why?我在 for 和 stream 中有不同的结果,为什么?
【发布时间】:2014-09-18 15:31:35
【问题描述】:

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

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

流有什么问题?

【问题讨论】:

  • “它不起作用”不是问题陈述。告诉我们您想要什么行为,以及您实际得到什么行为。包括您收到的任何错误消息的确切措辞,并指定导致错误消息的代码行。

标签: java for-loop java-8 java-stream


【解决方案1】:

假设 createLine 添加到 pool,则此

.orElse(createLine(color));

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

您可能正在寻找带有SupplierorElseGet,它将调用createLine(color)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 2023-03-22
    • 2014-08-14
    相关资源
    最近更新 更多