Java - removeIf示例

Vac*_* H. 2 java lambda

HashMap<Integer, ArrayList<Integer>> cityMap = new HashMap<>();
...    
for (ArrayList<Integer> list : cityMap.values()) {
    int size = list.size();
    if (size > 0) {
        list.removeIf(i -> true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我不太明白在这种情况下removeIf是做什么的.特别是部分(i - > true).谢谢你的任何解释.

Har*_*ezz 9

Javadoc removeIf()州:

删除此集合中满足给定谓词的所有元素.

示例中的谓词总是true因为您i将列表中的每个整数映射到true表达式:i -> true.

我添加了一个更简单的示例,它删除所有偶数整数并通过谓词保留所有奇数整数i % 2 == 0:

丑陋的设置:

List<List<Integer>> lists = new ArrayList<List<Integer>>() {{
    add(new ArrayList<>(Arrays.asList(1,2,3,4)));
    add(new ArrayList<>(Arrays.asList(2,4,6,8)));
    add(new ArrayList<>(Arrays.asList(1,3,5,7)));
}};
Run Code Online (Sandbox Code Playgroud)

只保留奇数:

for (List<Integer> list : lists) {
    list.removeIf(i -> i % 2 == 0);
    System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 3]
[]
[1, 3, 5, 7]
Run Code Online (Sandbox Code Playgroud)


Joe*_*e C 2

removeIf将遍历列表中的每个元素并对其运行指定的谓词(布尔函数)。如果谓词返回true,它将从列表中删除。如果谓词返回false,则不会。

在您的情况下,每个元素都会导致谓词返回true,从而清除列表。