说我有一个如下的详细模型:
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,演示者特别提到在流外部对对象进行更改是一个坏主意,但我已经多次看到上述代码。我的理解错了吗?
答案 0 :(得分:6)
首先,不是从details.forEach
调用stream
,而是直接从List
调用,这是不同的事情。而且,当然,您不是在流的外部 进行变异,而是在detail
本身进行变异。
然后,您要更改对象的内部属性,而不是List
本身(例如,remove
或add
的内部变量-这称为a非结构性变更,这样做是完全可以的。