巧用List.stream()方法对List做处理
List.steam()的强大之处在此不做赘述。
直接进入主题:
1.过滤Bean List中,某些字段等于指定值的所有行
- List<Member> list = itemsArray.toJavaList(Member.class);
- List<String> roleList = new ArrayList<>();
- roleList.add(roleName);
- List<Member> filterResult = list.stream().filter((Member m)->roleList.contains(m.getProjectRole())).collect(Collectors.toList());
2.判断Bean List中,是否存在某个属性的值等于指定的值
- //方式1.直接使用lamda表达式判断filterResult中是否包含personEmail,推荐此方法
- if (filterResult.stream().filter(w->String.valueOf(w.getPersonEmail()).equals(personEmail)).findAny().isPresent()){
- log.info("filterResult包含"+personEmail);
- }
- //方式2,在过滤的结果基础上,对值为personEmail的行再生成一个List
- List<String> personEmailList = new ArrayList<>();
- personEmailList.add(personEmail);
- List<Member> emailResult = filterResult.stream().filter((Member mem)->personEmailList.contains(mem.getPersonEmail())).collect(Collectors.toList());
- log.info(emailResult.size()+"过滤后是否包含"+personEmail);
3.将Bean List中,指定属性的列的所有值转换成Set(Set特性,已去重)
- Set<Long> result = list.stream().map(siteAssign->siteAssign.getVENDOR_ID()).collect(Collectors.toSet());
4.将Bean List中,指定属性的列的所有值转换成LIst(未去重)
- List<Long> result = list.stream().map(siteAssign->siteAssign.getVENDOR_ID()).collect(Collectors.toList());
5.根据Bean List中的指定属性进行Distinct ,这样得到的行是一个完整的行,取表中VENDOR_ID相同的行中的任一行。
- //https://blog.csdn.net/weixin_30451709/article/details/96156020
- //通过treeset去重,获取非员工供应商中的所有供应商ID,不重复
- List<SuppSiteAssign> result1 = siteAssignList.stream().filter(w -> !"EMPLOYEE".equals(w.getVENDOR_TYPE_LOOKUP_CODE())).collect(
- Collectors.collectingAndThen(
- Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SuppSiteAssign::getVENDOR_ID))), ArrayList::new));
- //同上,由其他方法完成
- List<SuppSiteAssign> result2= siteAssignList.parallelStream().filter(StreamUtil.distinctByKey(SuppSiteAssign::getVENDOR_ID)).collect(Collectors.toList());
- StreamUtil
- public class StreamUtil {
- /**
- * https://stackoverflow.com/questions/23699371/java-8-distinct-by-property
- * https://www.cnblogs.com/woshimrf/p/java-list-distinct.html
- * @return
- */
- public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
- Set<Object> seen = ConcurrentHashMap.newKeySet();
- return t -> seen.add(keyExtractor.apply(t));
- }
- }
关于parallelStream(),我尚未理解清楚。具体待查证。
6.既然有distinct方法,就必然有group by方法
https://blog.csdn.net/u013218587/article/details/74600585
- //按用户,role分组求数量
- Map<String, Map<String, Long>> tradeNumMap = dataAccessBeans.stream().collect(Collectors.groupingBy(DataAccessBean::getUSERNAME,
- Collectors.groupingBy(DataAccessBean::getROLE_NAME_DISPLAY,
- Collectors.counting())));
- for(String userName : tradeNumMap.keySet()){
- Map<String, Long> map = tradeNumMap.get(userName);
- for(String roleName : map.keySet()){
- Long count = map.get(roleName);
- if(count>10){
- log.info(userName+"-"+roleName+"-"+count);
- }
- }
- }
巧用List.stream()方法对List做处理的更多相关文章
- SQL中那么多函数,Java8为什么还要提供重复的Stream方法,多此一举?
有个同学提出一个这样的疑问; 在业务系统中,数据一般都从sql中查询,类似使用where,order by,limit,聚合函数等,为什么还要用java8的Stream方法? 对这个问题,大家有什么见 ...
- Java8的Stream方法findAny空指针异常(NullPointerException)实例对比
实战介绍 学习完Java8的Stream方法,可能你正准备大展身手,却发现遇到不少问题,本篇文章为大家带来一个findAny方法抛出java.lang.NullPointerException的场景. ...
- C#语言中的XmlSerializer类的XmlSerializer.Deserialize (Stream)方法举例详解
包含由指定的 XML 文档反序列化 Stream. 命名空间: System.Xml.Serialization程序集: System.Xml(位于 System.Xml.dll) 注意: 反序 ...
- weex stream 方法封装
1.封装 api.js // 配置API接口地址 const baseUrl = 'http://www.kuitao8.com/'; // 引入 弹窗组件 var modal = weex.requ ...
- [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误
一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...
- 一个网站完整的SEO优化方案,方法,怎么做seo优化?
SEO优化主要分为站内优化,站外优化.如果非得说一套完整的SEO优化方案,那就是需要4名专业人员:前端人员,内容编辑,网络推广人员,和数据分析人员.那以下就详细介绍这四个岗位各自负责的工作有哪些: 一 ...
- 巧用CSS3的calc()宽度计算做响应模式布局
今天浏览这个http://www.sitepoint.com站时,因为好奇看了下人家写的代码,结果发现了这行代码, 于是就研究了一下,calc()从字面我们可以把他理解为一个函数function.其实 ...
- NSURLSession/NSURLConnection的上传文件方法(已做了更新)
最好的学习方法就是 领悟 + 证悟. 此篇文章的理论基础主要是与HTTP网络通信协议相关.为集中精力,可以先把TCP/IP协议这些置之不理,也就是先只关注HTTP的请求和响应的结构.HTTP完整的原理 ...
- YII 小部件 yii小部件查看方法 小物件做的表单
要使用小部件,可以先到总文件去找 framework/yiilite文件里面搜索“CAtiveForm” (如果觉得小部件的radio布局有点难看,可以在外面定义,具体可以在控制器里面定义) 如下 ...
随机推荐
- 海思3519A 开发环境设置相关
设置板卡和虚拟机的网络参数 setenv serverip 192.168.1.107 setenv ipaddr 192.168.1.10 setenv gatewayip 192.168.1.1 ...
- 【转】STM32利用FATFS读写数组
因为存为TXT可以实现,但是读取TXT里边的数据总是不尽如人意,所以,最终存为bin文件了. 先摘几个观点: http://www.openedv.com/posts/list/36712.htm “ ...
- Prometheus(五):Prometheus+Alertmanager 配置企业微信报警
此处默认已安装Prometheus服务,服务地址:192.168.56.200 一.设置企业微信 1.1.企业微信注册(已有企业微信账号请跳过) 企业微信注册地址:https://work.weix ...
- Vue.prototype 全局变量
有两种都是在main.js声明 第一种 main.js 声明 Vue.config.productionTip = false // mount axios Vue.$http and this.$h ...
- 进程间通信之数据传输--Socket
The client server model Most interprocess communication uses the client server model. These terms re ...
- 关于Certificate、Provisioning Profile
Certificate(证书)就是app在打包的时候必须签名,苹果iOS系统在安装app之前会验证Certificate,否则不会通过安装. Provisioning Profile简单来说就是包含A ...
- 基于变分自编码器(VAE)利用重建概率的异常检测
本文为博主翻译自:Jinwon的Variational Autoencoder based Anomaly Detection using Reconstruction Probability,如侵立 ...
- mysql,本地连接看到的数据库不全,远程连接看到的数据库是完整的
xshell本地连接数据库,show databases; 下面只显示了两个数据库,mysql数据库看不到,问题原因是:用户没有权限 navicat远程连接,比上面看到的数据库多了很多,能看到mysq ...
- IDEA 中 Git Commit message 编写
IDEA安装插件 Git Commit Template 1. HeaderHeader的部分只有一行,包括三个字段: type(必需), scope(可选), subject(必需) 对应到idea ...
- JS对象创建模式
JS的对象创建模式 1.Object构造函数模式 var person = new Object(); person.name = 'name'; person.age = 43; console.l ...