Java lambdas:将节点从列表复制到新列表
Java lambdas: Copy nodes from list to a new list
我对 Java lambda 很陌生,我不确定我想要的是否可以实现:
我有一个对象列表,我想对其进行过滤以提取与给定条件匹配的对象,并将它们放在一个单独的列表中(这样我就可以对它们执行一些操作,保持原始列表不变)
我想到了这个:
List<Suggestion> only_translations = original_list.stream().
filter(t -> t.isTranslation).
collect(Collectors.toCollection(() -> new ArrayList<Suggestion>()));
但是即使我得到一个新的列表对象,节点似乎链接到原始的节点(通过引用,不是从原始列表复制的新对象),所以修改新列表中的对象就是修改也是原始对象中的对象。
所以,我想知道是否可以实现该目标(使用 lambda,我知道我可以通过 "classical" 迭代所有元素的方式来实现),在那种情况下,如何实现。
提前致谢!
假设您的建议在某种程度上具有 public Suggestion copy();
方法(例如实现 Copyable<Suggestion>
接口),您可以这样做:
List<Suggestion> only_translations = original_list.stream()
.filter(t -> t.isTranslation)
.map(t -> t.copy()) // or .map(Suggestion::copy)
.collect(Collectors.toList()));
编辑:使用复制构造函数:
List<Suggestion> only_translations = original_list.stream()
.filter(t -> t.isTranslation)
.map(t -> new Suggestion(t)) // or .map(Suggestion::new)
.collect(Collectors.toList()));
既然你说你有一个复制构造函数,那么只需在收集操作之前添加它来获取复制对象的列表:
.map(Suggestion::new)
我对 Java lambda 很陌生,我不确定我想要的是否可以实现: 我有一个对象列表,我想对其进行过滤以提取与给定条件匹配的对象,并将它们放在一个单独的列表中(这样我就可以对它们执行一些操作,保持原始列表不变) 我想到了这个:
List<Suggestion> only_translations = original_list.stream().
filter(t -> t.isTranslation).
collect(Collectors.toCollection(() -> new ArrayList<Suggestion>()));
但是即使我得到一个新的列表对象,节点似乎链接到原始的节点(通过引用,不是从原始列表复制的新对象),所以修改新列表中的对象就是修改也是原始对象中的对象。
所以,我想知道是否可以实现该目标(使用 lambda,我知道我可以通过 "classical" 迭代所有元素的方式来实现),在那种情况下,如何实现。 提前致谢!
假设您的建议在某种程度上具有 public Suggestion copy();
方法(例如实现 Copyable<Suggestion>
接口),您可以这样做:
List<Suggestion> only_translations = original_list.stream()
.filter(t -> t.isTranslation)
.map(t -> t.copy()) // or .map(Suggestion::copy)
.collect(Collectors.toList()));
编辑:使用复制构造函数:
List<Suggestion> only_translations = original_list.stream()
.filter(t -> t.isTranslation)
.map(t -> new Suggestion(t)) // or .map(Suggestion::new)
.collect(Collectors.toList()));
既然你说你有一个复制构造函数,那么只需在收集操作之前添加它来获取复制对象的列表:
.map(Suggestion::new)