1)
之间有什么区别for (MyObject myObject : sessionBean.firstList()) {
secondList.add(new MyObject(myObject.getSeverity(), myObject.getSummary(), myObject.getDetail()));
}
和
for (MyObject myObject : sessionBean.firstList()) {
secondList.add(facesMessage);
}
考虑到我后来想要清除sessionBean.firstList但想要保留secondList中的值。
2)在java 8中有更可读的方法吗?
答案 0 :(得分:1)
你可以用一种可读的方式在单一陈述中完成:
secondList.addAll(sessionBean.firstList())
使用new时,您将分配额外的内存,否则您将映射现有对象的引用。即使您想在稍后的时间点清除sessionBean.firstList,如果您对另一个集合中的对象有有效的引用,垃圾收集器也不会收集它。所以我看不出任何有效的场景来强制使用new运算符。
答案 1 :(得分:0)
1)不同之处在于,在第一种情况下,secondList
将包含对具有与firstList
中相同字段的新对象的引用。在第二种情况下,secondList
将包含与firstList
中相同对象的引用。因此,如果您修改了firstList
项之一,则secondList
中的相应项也会被修改。
2)您可以使用以下示例创建包含副本的列表:
List<MyObject> secondList = sessionBean.firstList()
.stream()
.map(first -> new MyObject(first.getSeverity(), first.getSummary(), first.getDetail()))
.collect(Collectors.toList());
或者,如果您在clone
类
MyObject
方法
public MyObject clone() {
return new MyObject(severity, summary, detail);
}
你可以简单地写一下:
List<MyObject> secondList = sessionBean.firstList()
.stream()
.map(MyObject::clone)
.collect(Collectors.toList());
或者,如果您只想复制参考文献,请使用
secondList.addAll(sessionBean.firstList())