我应该对流中的对象进行突变吗?

时间:2018-10-05 09:30:58

标签: java java-stream

说我有一个如下的详细模型:

public class Detail {
    public Integer lineId;
    public Integer quantity;
    public BigDecimal length;
    public Integer sequenceNumber;
}

我从中创建了一个列表。

List<Detail> details = details();

现在我想通过一种方法更新序列号:

public void updateSequenceNumbers(List<Detail> details) {
    details.forEach(detail -> detail.sequenceNumber = getNumberFromElsewhere());
}

根据我的理解,应该排除在上面可能发生的任何语法错误。我的问题是我应该这样做吗?我正在观看this youtube video,演示者特别提到在流外部对对象进行更改是一个坏主意,但我已经多次看到上述代码。我的理解错了吗?

1 个答案:

答案 0 :(得分:6)

首先,不是从details.forEach调用stream,而是直接从List调用,这是不同的事情。而且,当然,您不是在流的外部 进行变异,而是在detail本身进行变异。

然后,您要更改对象的内部属性,而不是List本身(例如,removeadd的内部变量-这称为a非结构性变更,这样做是完全可以的。