0%

Java 8 Stream filter过滤Map>

过滤复杂的Map,map的value是一个List,把这个List中不满足要求的元素过滤掉。

使用java8 stream api应该这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static void main(String[] args) {

Map<String, List<String>> map = new HashMap<>();
List<String> g1 = new ArrayList<>();
g1.add("M");
g1.add("F");
g1.add("M");

map.put("1", g1);
map.put("2", null);

List<String> g2 = new ArrayList<>();
g2.add("M");
g2.add("M");
g2.add("X");
g2.add("F");
g2.add("Y");

map.put("3", g2);

System.out.println(map);

Map<String, List<String>> newMap = map.entrySet().stream()
.filter(e -> CollectionUtils.isNotEmpty(e.getValue()))
.collect(Collectors.toMap(
Map.Entry::getKey,
e -> e.getValue().stream()
.filter(i -> "M".equals(i))
.collect(Collectors.toList())
));

System.out.println(newMap);
}

结果:

1
2
3
{1=[M, F, M], 2=null, 3=[M, M, X, F, Y]}

{1=[M, M], 3=[M, M]}