博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用stream对map集合进行过滤
阅读量:5971 次
发布时间:2019-06-19

本文共 2827 字,大约阅读时间需要 9 分钟。

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

原有方法说明

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

img_7ef0a380e93777b2a28e74da0d1caa44.png

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

img_e8294b64d29363abc88870a94b3e9e10.png

  • 1.利用filter对null和空字符串进行过滤
  • 2.利用map进行对于Stream中包含的元素使用给定的转换函数进行转换操作
  • 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; } return 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); 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的处理还是很好的。并且实际工作中用到的地方比较多。

学习不是要么0分,要么100分的。80分是收获;60分是收获;20分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的0分了。

转载地址:http://kpzox.baihongyu.com/

你可能感兴趣的文章
等待多个并发事件完成的模型
查看>>
drbd 配置
查看>>
Codeforces Round #503 (by SIS, Div. 1)D. the hat
查看>>
第十一章 块(上)
查看>>
Layabox 常用操作
查看>>
ASP.NET应用程序
查看>>
学习javascript必须订阅30个程序员的Blog
查看>>
C#面向对象9 字符串
查看>>
C#日期格式化(转)
查看>>
[CLPR] 用于加速训练神经网络的二阶方法
查看>>
西门子Step7找不到有效授权的解决方法
查看>>
将SVN的代码推送到码云的步骤
查看>>
C#Excel文件读取问题及解决办法
查看>>
啸叫抑制(howling suppression)
查看>>
基础005_V7-Select IO
查看>>
Norm(范数)
查看>>
类和对象
查看>>
sersync之不洗澡
查看>>
Web环境从Apache转Nginx后页面报404错误
查看>>
SysTick定时器的一个简单应用
查看>>