Java8中利⽤stream对map集合进⾏过滤的⽅法
前⾔
Stream 是⽤函数式编程⽅式在集合类上进⾏复杂操作的⼯具,其集成了Java 8中的众多新特性之⼀的聚合操作,开发者可以更容易地使⽤Lambda表达式,并且更⽅便地实现对集合的查、遍历、过滤以及常见计算等。
最近公司在⼤张旗⿎的进⾏代码审核,从中也发现⾃⼰写代码的不好习惯。⼀次⽆意的点到了公司封装的对map集合过滤的⽅法,发现了stream。于是研究了⼀下。并对原有的代码再次结合Optional进⾏重构下
原有⽅法说明
主要处理过滤条件Map对象,过滤掉了null和空字符串等操作
这⾥我简单画了个图,对这个过程总结
1.利⽤filter对null和空字符串进⾏过滤
2.利⽤map进⾏对于Stream中包含的元素使⽤给定的转换函数进⾏转换操作
由于公司的代码不合适⾃⼰展⽰,我这⾥⾃⼰仿照公司的写了个类似的简单⽅法,然后⼀步⼀步优化
⾃定义map⼯具类处理⽅法
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//这⾥的代码和原先的代码相⽐做了修改,去掉了map进⾏对于Stream中包含的元素使⽤给定的转换函数进⾏转换操作
public static Map<String, Object> parseMapForFilter(Map<String, Object> map) {
if(map == null) {
return null;
} else{
map = Set().stream()
.filter((e) -> Value()))
.Map(
(e) -> (String) e.getKey(),
(e) -> e.getValue()
));
}
return map;
}
private static boolean checkValue(Object object) {
if(object instanceof String && "".equals(object)) {
return false;
}
if(null== object) {
return false;
}
return true;
}
测试下1
2 3 4 5 6 7 8 9 10 11public static void main(String[] args) {
Map<String,Object> params = new HashMap<>(16); params.put("a","");
params.put("b",null);
params.put("c","c");
params = MapUtil.parseMapForFilter(params); System.out.println(params);
System.out.println(MapUtil.parseMapForFilter(null)); }
11
输出结果
java stream{c=c}
null
优化parseMapForFilter ⽅法,加⼊Optional类1
2 3 4 5 6 7 8 9 10 11 12 13 14 15public static Map<String, Object> parseMapForFilterByOptional(Map<String, Object> map) { return Optional.ofNullable(map).map(
(v) -> {
Map params = v.entrySet().stream()
.filter((e) -> Value()))
.Map(
(e) -> (String) e.getKey(),
(e) -> e.getValue()
));
return params;
}
).orElse(null);
}
是不是感觉更清晰了呢?测试⼀下
1 2 3 4 5 6 7 8 9 10 11 12public static void main(String[] args) {
Map<String, Object> params = new HashMap<>(16); params.put("a", "");
params.put("b", null);
params.put("c", "c");
params = MapUtil.parseMapForFilterByOptional(params); System.out.println(params);
System.out.println(MapUtil.parseMapForFilterByOptional(null)); }
结果
1 2 3 4 5 6 7 8{c=c}
null
优化checkValue⽅法
private static boolean checkValueByOptional(Object object) { return(Boolean) Optional.ofNullable(object)
.filter((e) -> e instanceof String && e.equals("") ? false: true)  .orElse(false);
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。