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)