Java8中利用stream对map集合进行过滤的方法

网友投稿 1095 2023-01-24


Java8中利用stream对map集合进行过滤的方法

前言

Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等。

最近公司在大张旗鼓的进行代码审核,从中也发现自己写代码的不好习惯。一次无意的点到了公司封装的对map集合过滤的方法,发现了stream。于是研究了一下。并对原有的代码再次结合Optional进行重构下

原有方法说明

主要处理过滤条件Map对象,过滤掉了null和空字符串 等操作

这里我简单画了个图,对这个过程总结

1.利用filter对null和空字符串进行过滤

2.利用map进行对于Streamhttp://中包含的元素使用给定的转换函数进行转换操作

3.collect进行聚合成map

由于公司的代码不合适自己展示,我这里自己仿照公司的写了个类似的简单方法,然后一步一步优化

自定义map工具类处理方法

//这里的代码和原先的代码相比做了修改,去掉了map进行对于Stream中包含的元素使用给定的转换函数进行转换操作

public static Map parseMapForFilter(Map map) {

if (map == null) {

return null;

} else {

map = map.entrySet().stream()

.filter((e) -> checkValue(e.getValue()))

.collect(Collectors.toMap(

(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;

}

JENSYkreturn true;

}

测试下

public static void main(String[] args) {

Map 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));

}

输出结果

{c=c}

null

优化parseMapForFilter 方法,加入Optional类

public static Map parseMapForFilterByOptional(Map map) {

return Optional.ofNullable(map).map(

(v) -> {

Map params = v.entrySet().stream()

.filter((e) -> checkValue(e.getValue()))

.collect(Collectors.toMap(

(e) -> (String) e.getKey(),

(e) -> e.getValue()

));

return params;

}

).orElse(null);

}

是不是感觉更清晰了呢?

测试一下

public static void main(String[] args) {

Map params = new HashMap<>(16);

http:// 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));

}

结果

{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);

}

总结

大家是不是感觉lambda 写法更加简单明了,不再充满着if判断。但如果大家首写的时候,肯定感觉不习惯,我刚开始写的时候,也是很别扭,根本不知道怎么写。一点点去尝试。更多细节基础的问题这里不再叙述。

只是感觉这个对map的处理还是很好的。并且实际工作中用到的地方比较多。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:怎么连接共享文件夹快捷键(怎么连接共享文件夹快捷键设置)
下一篇:Java实现微信网页授权的示例代码
相关文章

 发表评论

暂时没有评论,来抢沙发吧~