首页 > 解决方案 > Java8 lambda 从 List 中删除元素并更新布尔标志值

问题描述

当我nameRemoved=trueList<String>

这是我在这里使用的传统方法。

List<String> list = new ArrayList<String>();
if (list.contains("abc")) {
    list.remove("abc");
    nameRemoved=true
}

我可以使用下面的方法从列表中删除元素,但是如何将标志值设置为nameRemoved=true使用 lambda 语法?

List<String> list = new ArrayList<String>();
list.removeIf(name -> name.equalsIgnoreCase("abc"));

标签: javalambdacollectionsjava-8

解决方案


按照操作的要求,我将我的评论作为答案。因为如果任何元素被删除,removeIf 返回 true,您可以根据结果设置标志。

nameRemoved = list.removeIf(name -> name.equalsIgnoreCase("abc"))

或者更安全并带有方法参考:

nameRemoved = list.removeIf("abc"::equalsIgnoreCase);

编辑:正如@Holger 评论的那样,这个答案只关注如何用removeIf 替换代码。但是这段代码与第一个代码完全不同。第一个从列表中只删除一个与给定字符串完全匹配的元素。我提供的将删除所有匹配的元素,忽略大小写。


推荐阅读