java stream List转Map与List转List与Map转List以及List转Map 原创 2021-02-03 17:26:48.0 阅读(8600)次 我们写代码时经常会遇到List转Map或List转List,Map转List,看到我这标题有没有要晕(我在说什么??转来转去)。之前没有用stream的时候,都是用for循环转换,现在jdk8提供流式处理,性能稍快,还方便。 下面记录一下代码,免得自己老是不记得如果编写stream. #### List转Map ```java Map tgMap = tgList.stream().collect(Collectors.toMap(BazTgTO::getTgId, n -> n)); ``` #### Map转List ```java list = dbFilterMap.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList()); ``` map转list,可以收集key或value,可以在上面自定义 复杂的key定义示例: ```java Map cameraInfoMap = cameraInfoList.stream().collect(Collectors.toMap( c ->{ String apeNumber = c.getApeNumber(); if(StringUtils.isEmpty(apeNumber) == false && apeNumber.indexOf("#") != -1){ String apeCode = apeNumber.substring(0, apeNumber.indexOf("#")); return apeCode; } return null; }, c -> c)); ``` #### List转List ```java List list = mbTrackList.stream().map(t -> t.getMbTrackId()).collect(Collectors.toList()); ``` #### List转List(去重) 但是上面的List转List会有重复数据问题,可以使用去重方式解决: 代码如下: ```java List apes = dataList.stream().map(e -> e.getApeId()).filter(StreamUtil.distinctByKey(n -> n)).collect(Collectors.toList()); public class StreamUtil { public static Predicate distinctByKey(Function super T, ?> keyExtractor) { ConcurrentHashMap map = new ConcurrentHashMap<>(); return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; } } ``` 去重的多种方式可以查看我另一篇文章,[http://www.classinstance.cn/detail/175.html](http://www.classinstance.cn/detail/175.html "http://www.classinstance.cn/detail/175.html") #### List分组转Map(分组) ```java Map> gradeClassList = classInfoList.stream().collect(Collectors.groupingBy(ClassInfo::getGradeUuid)); ``` 上面的代码是将班级按年级ID分组到不同List中,并将不同的年级ID存到Map中。 #### List转Map ```java Map resultMap = list.stream().collect( Collectors.toMap(s->s.get("staticDay"), s -> s.get("total"))); ``` java java基础 上一篇:es聚合之实现日期按周一到周日的聚合统计 下一篇:java使用guava cache实现本地缓存
相关文章 java使用BufferedImage放大或缩小图片(4643) java Md5工具类获取字符串的Md5值(1265) 图片的base64字符转成BufferedImage(2665) java使用guava cache实现本地缓存(4854) java List数据内存分页(3084) java阻塞的线程安全的优先级队列PriorityBlockingQueue(1969) java Map通过遍历器Iterator来实现遍历过程中删除元素来避免ConcurrentModificationException异常(1136) java程序员多线程常见的代码bug(1657) 如何缩小jre1.8(1467) java DelayQueue延时队列的应用(1175) 推荐文章 使用spring4实现websocket连接(1) Parameter index out of range (1 > number of parameters, which is 0(7) spring cloud+feign+mybatis中使用seata0.9实现分布式事务(7) spring cloud gateway报错Only one connection receive subscriber allowed(82) spring cloud中Feign调用诡异报错MethodNotAllowed: status 405 reading(116) elasticsearch7.1保存时报错: Validation Failed: 1: type is missing;(7) 聊聊数据保存到MySQL后数据乱码的问题(1) jquery对象与dom对象互转(1) linux使用epel源yum安装iftop、nload、nginx等(2) linux下nginx安装其他模块(1) 热门文章 java stream去重的几种方式(40819) the dependencies of some of the beans in the application context form a cycle(16324) 解决mybatis打印查询结果集造成太多日志的问题(9839) java enum枚举转list和Map(9722) java stream List转Map与List转List与Map转List以及List转Map(8468) ServletRequest转HttpServletRequest设置header之后取不到header的问题(8434) java中BufferedImage转成 base64字符串(8098) 切分List集合为多个List集合(7385) maven修改jar包版本不生效解决办法(6990) bootstrap.yml配置报错:Could not resolve placeholder 'xx' in value (6949) 标签列表 java java java java java java java基础 微服务 异常处理 mysql clickhouse clickhouse clickhouse clickhouse clickhouse spring cloud spring boot linux elasticsearch feign jdbc spring js docker postgresql solr seata nginx maven gateway hsqldb 数据库 架构 大数据分析 分布式事务 redis canal dubbo hadoop 消息队列 win10 websocket springmvc git html select2 mybatis jenkins rocketmq quartz activemq 数据库集群 ajax bat 电脑 笔记 eclipse 设计模式 阿里云 github freemarker jvm jquery javamail redission redission对象 hystrix http hibernate springmail svn ubuntu ueditor xheditor zookeeper 分布式 小程序 开发工具 gitlab