Java - removeIf示例

时间:2017-04-06 05:43:16

标签: 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);
    }
}

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

2 个答案:

答案 0 :(得分:7)

removeIf()的Javadoc声明:

  

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

示例中的谓词始终为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)));
}};

只保留奇数:

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

<强>输出:

[1, 3]
[]
[1, 3, 5, 7]

答案 1 :(得分:0)

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

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