Java8 lambda 从 List<?> 中删除元素并更新布尔标志值

Swa*_*wal 1 java collections lambda java-8

我必须设置一个标志nameRemoved=true,当我从List<String>

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

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

Run Code Online (Sandbox Code Playgroud)

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

List<String> list = new ArrayList<String>();
list.removeIf(name -> name.equalsIgnoreCase("abc"));
Run Code Online (Sandbox Code Playgroud)

JEY*_*JEY 7

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

nameRemoved = list.removeIf(name -> name.equalsIgnoreCase("abc"))
Run Code Online (Sandbox Code Playgroud)

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

nameRemoved = list.removeIf("abc"::equalsIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

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