您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页巧用List.stream()方法对List做处理

巧用List.stream()方法对List做处理

来源:华佗小知识
巧⽤List.stream()⽅法对List做处理

List.steam()的强⼤之处在此不做赘述。直接进⼊主题:

1.过滤Bean List中,某些字段等于指定值的所有⾏

List list = itemsArray.toJavaList(Member.class); List roleList = new ArrayList<>(); roleList.add(roleName);

List 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 personEmailList = new ArrayList<>(); personEmailList.add(personEmail);

List emailResult = filterResult.stream().filter((Member mem)->personEmailList.contains(mem.getPersonEmail())).collect(Collectors.toList()); log.info(emailResult.size()+\"过滤后是否包含\"+personEmail);

3.将Bean List中,指定属性的列的所有值转换成Set(Set特性,已去重)

Set result = list.stream().map(siteAssign->siteAssign.getVENDOR_ID()).collect(Collectors.toSet());

4.将Bean List中,指定属性的列的所有值转换成LIst(未去重)

List 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 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 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 Predicate distinctByKey(Function keyExtractor) { Set 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> tradeNumMap = dataAccessBeans.stream().collect(Collectors.groupingBy(DataAccessBean::getUSERNAME,

Collectors.groupingBy(DataAccessBean::getROLE_NAME_DISPLAY, Collectors.counting())));

for(String userName : tradeNumMap.keySet()){

Map map = tradeNumMap.get(userName); for(String roleName : map.keySet()){ Long count = map.get(roleName); if(count>10){

log.info(userName+\"-\"+roleName+\"-\"+count); } } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务