您好,我最近开始学习流。我在理解如何使用流从ArrayList中删除特定项时遇到了麻烦。
我知道我可以使用这样的行删除特定的项目
nameList.removeIf(e ->(e.getName().equals(c.getName))));
我遇到的麻烦是使用这样的代码删除项目
nameList.stream()
.filter( e -> (e.getName().equals(c.getName())))
.map(nameList::remove);
我不确定该代码缺少什么或做错了什么。任何帮助,将不胜感激。谢谢。
答案 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函数简单地过滤出列表中的元素。