过滤复杂的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]}
|