ArrayList流和删除对象

时间:2018-08-08 01:05:30

标签: arraylist java-stream

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

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

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

我遇到的麻烦是使用这样的代码删除项目

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

我不确定该代码缺少什么或做错了什么。任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:1)

您可以这样做

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

这就是诀窍。可以从现有Predicate中删除与给定List匹配的元素,而不是将与Predicate不匹配的元素收集到另一个列表中。这种方法符合功能编程的基本概念,例如不变性。

答案 1 :(得分:0)

filter函数将返回调用流中与给定谓词函数匹配的项的列表。因此,如果您想要nameList中名称等于字符串“ x”的项目列表,则可以执行以下操作:

filteredList = nameList.stream().filter(e -> e.getName().equals(“x”));

您没有在示例中包含变量c的含义,因此我不确定在示例中如何使用该变量。不必将过滤器顶部的map函数简单地过滤出列表中的元素。