mot*_*rl2 6 java lambda filter collect java-stream
我是Java lambdas的新手,我不确定我想要的是否可以实现:我有一个对象列表,我想过滤它们以提取那些匹配给定条件的对象,并将它们放入一个单独的列表(所以我可以对它们执行一些操作,保持原始列表不被修改)我想出了这个:
List<Suggestion> only_translations = original_list.stream().
filter(t -> t.isTranslation).
collect(Collectors.toCollection(() -> new ArrayList<Suggestion>()));
Run Code Online (Sandbox Code Playgroud)
但即使我得到一个新的列表对象,节点似乎链接到原始列表(通过引用,而不是从原始列表中复制的新对象),因此修改新列表中的对象也会修改原来的.
所以,我想知道它是否可行实现(使用lambdas,我知道我可以用迭代所有元素的"经典"方式),在这种情况下,如何实现.提前致谢!
假设你的建议有点拥有一个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()));
Run Code Online (Sandbox Code Playgroud)
编辑:使用复制构造函数:
List<Suggestion> only_translations = original_list.stream()
.filter(t -> t.isTranslation)
.map(t -> new Suggestion(t)) // or .map(Suggestion::new)
.collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)