首页 > 解决方案 > ArrayList 流和删除对象

问题描述

你好我最近开始学习流。我在理解如何使用流从 ArrayList 中删除特定项目时遇到了一些麻烦。

我知道我可以使用这样的行删除特定项目

nameList.removeIf(e ->(e.getName().equals(c.getName))));

我遇到的问题是使用这样的代码来删除项目

nameList.stream()
    .filter( e -> (e.getName().equals(c.getName())))
    .map(nameList::remove);

我不确定我错过了什么或这段代码做错了什么。任何帮助,将不胜感激。谢谢你。

标签: arraylistjava-stream

解决方案


你可以这样做,

List<Element> removedList = nameList.stream().filter(e -> !e.getName().equals(c.getName()))
                .collect(Collectors.toList());

这是诀窍。您可以将不匹配的元素收集到不同的列表中,而不是Predicate从现有元素中删除与给定元素匹配的元素。这种方法符合函数式编程的基本概念,例如不变性。ListPredicate


推荐阅读