目录

  • 1、List<Map>使用map中每一个字符拼接字符串
  • 2、取出list集合对象中某一个属性,生成新的list
  • 3、list集合的排序
    • ①List(Bean)
    • ②List (Map):方式①
    • ③List (Map):方式2
  • 4、list集合分组
    • ①Collectors.groupingBy
    • ②Maps.uniqueIndex
  • 5、List中Map 根据key去重
  • 6、list的filter过滤
    • ① java8的方式
    • ②java版本低于8的方式
  • 7、java8 stream做统计(分组后取最大最小,排序)
  • 8、先用groupingBy分组,再使用joining将某个字段进行拼接
  • 9、java8 两个List集合取交集、并集、差集

1、List<Map>使用map中每一个字符拼接字符串

参考来源

List> list = new ArrayList<>();Map m = new HashMap();m.put("name", "樟树街");Map m1 = new HashMap();m1.put("name", "樟树街1");Map m2 = new HashMap();m2.put("name", "樟树街1");list.add(m);list.add(m2);list.add(m1);String s= list.stream().map(p->p.get("name")).collect(Collectors.joining(","));
  List<SysInfoItem> sysInfoItems = sysFeignClient.getInfoItemsBySetId('');
// 【启用】状态的字段名称,以读好分隔
String items = sysInfoItems.stream().map(sysInfoItem -> sysInfoItem.getItemId()).collect(Collectors.joining(","));

2、取出list集合对象中某一个属性,生成新的list

参考来源

List<TrnRequirement> list = this.list();
List<String> requirementIdList = list.stream().map(TrnRequirement::getId).distinct().collect(Collectors.toList());

3、list集合的排序

①List(Bean)

//排序 项目状态(已结束的在最后面),累计项目效能,部门,项目经理resultList = resultList.stream().sorted(Comparator.comparing(StatisticsProjectEfficacyVO::getProjectStatus).thenComparing(StatisticsProjectEfficacyVO::getEfficacyTotal).thenComparing(StatisticsProjectEfficacyVO::getDeptId).thenComparing(StatisticsProjectEfficacyVO::getProjectManageName)).collect(Collectors.toList());
@Data
@AllArgsConstructor
public class Person {Integer id;Integer age;Integer type;public static void main(String[] args) {List<Person> persons = new ArrayList<>();persons.add(new Person(7, 10, 1));persons.add(new Person(2, 10, 1));persons.add(new Person(5, 10, 1));persons.add(new Person(3, 26, 2));persons.add(new Person(4, 35, 2));persons.add(new Person(6, 23, 2));persons.add(new Person(10, 23, 3));persons.add(new Person(11, 24, 3));persons.add(new Person(11, 23, 3));persons = persons.stream().sorted(Comparator.comparing(Person::getType).reversed().thenComparing(Person::getId).thenComparing(Comparator.comparing(Person::getAge).reversed())).collect(Collectors.toList());System.out.println(JSON.toJSONString(persons));}}

上面的代码,先对 type 降序, 再对 id 升序,最后对 age 降序

②List (Map):方式①

参考地址

public class Test {public static void main(String[] args) {Map<String, Object> map = new HashMap<String, Object>();map.put("name", "ZK");map.put("age", 13);Map<String, Object> map2 = new HashMap<String, Object>();map2.put("name", "ZA");map2.put("age", 15);Map<String, Object> map3 = new HashMap<String, Object>();map3.put("name", "CX");map3.put("age", 20);Map<String, Object> map4 = new HashMap<String, Object>();map4.put("name", "CX");map4.put("age", 18);List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();list.add(map);list.add(map2);list.add(map3);list.add(map4);// 排序代码如下List<Map<String, Object>> collect = list.stream().sorted(Comparator.comparing(Test::comparingByName).thenComparing(Comparator.comparing(Test::comparingByAge).reversed())).collect(Collectors.toList());}private static String comparingByName(Map<String, Object> map){return (String) map.get("name");}private static Integer comparingByAge(Map<String, Object> map){return (Integer) map.get("age");}

③List (Map):方式2

list.sort()集合排序之null值处理

 public static void main(String[] args) {testListMapSort();}public static void testListMapSort() {List<Map> list = new ArrayList<>();Map map1 = new HashMap<>();map1.put("aaa", "2021-10-12");list.add(map1);Map map2 = new HashMap<>();map2.put("aaa", "2022-08-10");list.add(map2);Map map3 = new HashMap<>();map3.put("aaa", "2021-08-19");list.add(map3);System.out.println(JSON.toJSON(list));list.sort(Comparator.comparing(map -> (String) map.get("aaa")));System.out.println(JSON.toJSON(list));}}

4、list集合分组

①Collectors.groupingBy

注意:key不能为空

Map<String, List<SiFundBaseManage>> baseManageMap =
baseManageList.stream().collect(
Collectors.groupingBy(SiFundBaseManage::getPersonId)
);

②Maps.uniqueIndex

//若name对应了多条记录,会报错
Map<String, Fruit> map = Maps.uniqueIndex(
fruitList, Fruit::getName);

5、List中Map 根据key去重

参考地址

public List<Map<String, String>> getAttrActions(String ns, String category, String ci) {String sql = "SELECT ID AS value,NAME AS label FROM IES.CMDB_META_ACTION " +"WHERE NS = '" + ns + "' AND CATEGORY = '" + category + "' AND CI = '" + ci + "'";List<Map<String, Object>> mapList = runner.executeSQL(sql);List<Map<String, Object>> attrActionsList = new ArrayList<>();DMMetaEnum.MetaAttrActions[] attrActions = DMMetaEnum.MetaAttrActions.values();for (DMMetaEnum.MetaAttrActions attrAction : attrActions) {HashMap<String, Object> map = new HashMap<>(1);map.put(VALUE, attrAction.getValue());map.put(LABEL, attrAction.getLabel());attrActionsList.add(map);}//合并mapList.addAll(attrActionsList);List<Map<String, String>> newList = new ArrayList<>();for (Map<String, Object> map : mapList) {Map<String, String> newMap = new HashMap<>();newMap.put(VALUE, map.get(VALUE).toString());newMap.put(LABEL, map.get(LABEL).toString());newList.add(newMap);}//去重(map中的key和value都是String类型)newList = newList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(m -> m.get(VALUE)))), ArrayList::new));return newList;}
newList = newList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(m -> m.get(VALUE)))), ArrayList::new));

6、list的filter过滤

① java8的方式

List<ActAtndLeave> approveInfoList_tmp =JacksonUtils.fromJson(JacksonUtils.toJson(approveInfoList), ArrayList.class,ActAtndLeave.class);List<ActAtndLeave> atndLeaveList_date = approveInfoList_tmp.stream().filter((ActAtndLeave leave) ->(leave.getStartTime().compareTo(fullWorkTime) >= 0 && leave.getStartTime().compareTo(fullOffWorkTime) <= 0)|| (leave.getEndTime().compareTo(fullWorkTime) >= 0 && leave.getEndTime().compareTo(fullOffWorkTime) <= 0)|| (fullWorkTime.compareTo(leave.getStartTime()) >= 0 && fullWorkTime.compareTo(leave.getEndTime()) <= 0)|| (fullOffWorkTime.compareTo(leave.getStartTime()) >= 0 && fullOffWorkTime.compareTo(leave.getEndTime()) <= 0)
).collect(Collectors.toList());

②java版本低于8的方式

如果java版本低于8,那么可以用下面ListUtils这个工具类

package com.icitic.hrms.util;/*** @author YangYQ* @since 2019-11-01 14:49**/
public interface ListUtilsHook<T> {public boolean test(T t);
}
package com.icitic.hrms.util;
import java.util.ArrayList;
import java.util.List;
/*** @author YangYQ* @since 2019-11-01 14:49**/
public class ListUtils {public static <T> List<T> filter(List<T> list, ListUtilsHook<T> hook) {ArrayList<T> r = new ArrayList<T>();for (T t : list) {if (hook.test(t)) {r.add(t);}}r.trimToSize();return r;}
}

使用方式

List clockList_dateMonth = this.jdbcTemplate.queryForList(sql_exception_new);//期间内的打卡记录
List<KqClockRecordBO> clockRecordBOList = JacksonUtils.fromJson(JacksonUtils.toJson(clockList_dateMonth),ArrayList.class, KqClockRecordBO.class);
// 1、当月缺卡信息查询
List<KqClockRecordBO> clockRecordBOList_this_MC = ListUtils.filter(clockRecordBOList,new ListUtilsHook<KqClockRecordBO>() {@Overridepublic boolean test(KqClockRecordBO bo) {return bo.getSIGN_IN_STATUS().equals(KqConstants.KQ_CLOCK_TYPE_MISSINGCARD);}});

7、java8 stream做统计(分组后取最大最小,排序)

原文链接

package com.lagou.multiThread.Test.pojo;import java.io.Serializable;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;public class User2 implements Serializable {private static final long serialVersionUID = 1220193146286930256L;private String id;private String name;private String groupId;private int num;private int age;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGroupId() {return groupId;}public void setGroupId(String groupId) {this.groupId = groupId;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public User2(String id, String name, String groupId, int num, int age) {this.id = id;this.name = name;this.groupId = groupId;this.num = num;this.age = age;}@Overridepublic String toString() {return "User{" +"id='" + id + '\'' +", name='" + name + '\'' +", groupId='" + groupId + '\'' +", num=" + num +", age=" + age +'}';}private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {Map<Object, Boolean> seen = new ConcurrentHashMap<>();return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;}public static void main(String[] args) {ArrayList<User2> list = new ArrayList<>(10);list.add(new User2("1", "1号", "A", 10, 10));list.add(new User2("2", "2号", "A", 20, 10));list.add(new User2("3", "3号", "E", 50, 12));list.add(new User2("4", "4号", "B", 60, 20));list.add(new User2("5", "5号", "C", 80, 40));list.add(new User2("6", "6号", "B", 220, 20));list.add(new User2("7", "7号", "A", 110, 2));list.add(new User2("8", "8号", "D", 110, 68));//去重复获取组System.out.println("----------去重复获取组-------------------");list.stream().filter(distinctByKey(User2::getGroupId)).map(User2::getGroupId).forEach(s -> {System.out.println(s);});//从第2个开始(下标)System.out.println("-------------从第2个开始----------------");list.stream().skip(2).forEach(s -> {System.out.println(s);});//取10以内的System.out.println("-------------取10以内的----------------");list.stream().filter(user -> user.getAge() <= 10).forEach(s -> {System.out.println(s);});//取最大System.out.println("----------------取最大-------------");User2 user = list.stream().max(Comparator.comparing(User2::getNum)).get();System.out.println(user);//分组求合System.out.println("---------------分组求合--------------");list.stream().collect(Collectors.groupingBy(User2::getGroupId, Collectors.summingInt(User2::getNum))).forEach((k, v) -> {System.out.println("K:" + k + "-V:" + v);});//分组取组内最大System.out.println("--------------分组取组内最大---------------");list.stream().collect(Collectors.groupingBy(User2::getGroupId, Collectors.maxBy(Comparator.comparingInt(User2::getNum)))).forEach((k, v) -> {System.out.println("K:" + k + "-V:" + v.get());});//分组取组内最小System.out.println("------------分组取组内最小-----------------");list.stream().collect(Collectors.groupingBy(User2::getGroupId, Collectors.minBy(Comparator.comparingInt(User2::getNum)))).forEach((k, v) -> {System.out.println("K:" + k + "-V:" + v.get());});//分组聚合多列System.out.println("---------------分组聚合多列计算--------------");list.stream().collect(Collectors.groupingBy(User2::getGroupId, Collectors.collectingAndThen(Collectors.toList(), users -> {Double[] ints = new Double[2];Double asDouble1 = users.stream().mapToInt(User2::getNum).average().getAsDouble();Double asDouble2 = users.stream().mapToInt(User2::getAge).average().getAsDouble();ints[0] = asDouble1;ints[1] = asDouble2;return ints;}))).forEach((k, v) -> {System.out.println("K:" + k + "-V:" + v[0] + "," + v[1]);});//分组后组内排序System.out.println("---------------分组后组内排序--------------");list.stream().collect(Collectors.groupingBy(User2::getGroupId, Collectors.collectingAndThen(Collectors.toList(), users -> {users.sort(Comparator.comparing(User2::getNum));return users;}))).forEach((k, v) -> {System.out.println("k:" + k);System.out.println("v----->:");v.forEach(s -> {System.out.println(s);});});}}

8、先用groupingBy分组,再使用joining将某个字段进行拼接

原文链接

public class User {private String name;private String age;private String groupId;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getGroupId() {return groupId;}public void setGroupId(String groupId) {this.groupId = groupId;}public User(String name, String age, String groupId) {this.name = name;this.age = age;this.groupId = groupId;}
}

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {User user1 = new User("测试1", "21", "1");User user2 = new User("测试2", "22", "1");User user3 = new User("测试3", "23", "2");User user4 = new User("测试4", "24", "1");User user5 = new User("测试5", "25", "3");User user6 = new User("测试6", "26", "2");User user7 = new User("测试7", "27", "1");User user8 = new User("测试8", "28", "5");User user9 = new User("测试9", "29", "1");User user10 = new User("测试10", "30", "5");List<User> list = new ArrayList<User>();list.add(user1);list.add(user2);list.add(user3);list.add(user4);list.add(user5);list.add(user6);list.add(user7);list.add(user8);list.add(user9);list.add(user10);Map<String, String> collect = list.stream().collect(Collectors.groupingBy(User::getGroupId, Collectors.mapping(User::getName, Collectors.joining(","))));for (String groupId : collect.keySet()) {String names = collect.get(groupId);System.out.println(groupId + ":" + names);}}
}
Map<Integer, List<String>> map2 = list.stream().collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toList())));

截图

允许结果:

1:测试1,测试2,测试4,测试7,测试9
2:测试3,测试6
3:测试5
5:测试8,测试10

9、java8 两个List集合取交集、并集、差集

参考链接

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class Test {public static void main(String[] args) {List<String> list1 = new ArrayList<String>();list1.add("1");list1.add("2");list1.add("3");list1.add("5");list1.add("6");List<String> list2 = new ArrayList<String>();list2.add("2");list2.add("3");list2.add("7");list2.add("8");// 交集List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());System.out.println("---交集 intersection---");intersection.parallelStream().forEach(System.out::println);// 差集 (list1 - list2)List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());System.out.println("---差集 reduce1 (list1 - list2)---");reduce1.parallelStream().forEach(System.out::println);// 并集List<String> listAll = list1.parallelStream().collect(Collectors.toList());List<String> listAll2 = list2.parallelStream().collect(Collectors.toList());listAll.addAll(listAll2);System.out.println("---并集 listAll---");listAll.parallelStream().forEachOrdered(System.out::println);// 去重并集List<String> listAllDistinct = listAll.stream().distinct().collect(Collectors.toList());System.out.println("---得到去重并集 listAllDistinct---");listAllDistinct.parallelStream().forEachOrdered(System.out::println);System.out.println("---原来的List1---");list1.parallelStream().forEachOrdered(System.out::println);System.out.println("---原来的List2---");list2.parallelStream().forEachOrdered(System.out::println);}
}

java8 stream 的list处理相关推荐

  1. JAVA8 Stream方法使用详解reduce、IntStream(二)

    文章目录 一 归约 1.元素求和 2.最大值和最小值 二.数值流 1.映射数值流 2.转换对象流 3.数值范围 三.构建流 1.由值创建流 2.由数组创建流 3.由文件生成流 4.由函数生成流 此章节 ...

  2. 怎么break java8 stream的foreach

    文章目录 简介 使用Spliterator 自定义forEach方法 总结 怎么break java8 stream的foreach 简介 我们通常需要在java stream中遍历处理里面的数据,其 ...

  3. java8 stream案例分析

    java8 stream Stream是java8 推出的一个处理集合类的一个全新的接口,在工作当中经常用到,并且他的预发规则与我们平台的有一点不一样,是流式的处理,非常类似RXJava的一个风格. ...

  4. java多字段排序,java8 stream多字段排序的实现

    很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理 使用java8新特性,下面先来点基础的 List list; 代表某集合 //返回 对象集合以类属性一 ...

  5. 简洁又快速地处理集合——Java8 Stream(下)

    上一篇文章我讲解 Stream 流的基本原理,以及它与集合的区别关系,讲了那么多抽象的,本篇文章我们开始实战,讲解流的各个方法以及各种操作 没有看过上篇文章的可以先点击进去学习一下 简洁又快速地处理集 ...

  6. Java8 stream().map()将对象转换为其他对象

    Java8 stream().map()将对象转换为其他对象 1: 将对象List转为List public class user{private String name;private String ...

  7. java8 Stream的实现原理 (从零开始实现一个stream流)

    1.Stream 流的介绍 1.1 java8 stream介绍 java8新增了stream流的特性,能够让用户以函数式的方式.更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算. 1.2  ...

  8. java sort 效率_性能对比:collections.sort vs treeSet sort vs java8 stream.sorted

    0 写在前面的话 在项目中有一个排序问题,考虑到未来需要排序的数据量可能很大,想用一个性能较好的排序算法,现在有三套解决方法:jdk提供的集合的sort方法(Collections.sort).一个可 ...

  9. Java基础学习总结(132)——Java8 Stream流操作学习总结

    传统的数据处理都是用循环来解决,而不是像搜索数据库那样有具体的搜索语句,而Java8的Stream提供了很好的方案,往往一行就搞定了,而且Stream还可以链式操作,一行代码实现多个循环的功能,代码风 ...

  10. java8 stream().map().collect()用法

    java8 stream().map().collect()用法 有一个集合: List<User> users = getList(); //从数据库查询的用户集合 现在想获取User的 ...

最新文章

  1. 【亲测可用】用Electron和electron-builder打包Vue项目为exe可执行文件安装包(不推荐,个人觉得没有VNISEdit和NW好用,而且有些配置文件还挺脑残!)
  2. python取出字典中的所有值的两种方法
  3. Java实现选择排序及其优化
  4. Laravel学习笔记(四)数据库 数据库迁移案例
  5. 数据库-笛卡尔积-内连接
  6. sql中问号是干什么的??
  7. Oracle中row_number()、rank()、dense_rank() 的区别
  8. 修改mysql文件的存储路径
  9. 【Elasticsearch】实用BM25 -第1部分: shard 如何影响Elasticsearch中的相关性评分
  10. R 多变量数据预处理_超长文详解:C语言预处理命令
  11. POJ 1001 Exponentiation
  12. 手摸手,一起整理前端小小小知识
  13. matlab2c使用c++实现matlab函数系列教程-range函数
  14. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)转载自码农网
  15. Linux系统中常用的shell命令(文件目录操作)
  16. cartographer 代码思想解读(9)- 激光雷达畸变矫正
  17. C# - 2017微软校园招聘笔试题 之 MS Recognition[待解决]
  18. Excel打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”最快的解决办法
  19. 基于51单片机的温度采集系统的设计四位数码管显示温度
  20. 【网络设备】交换机相同VLAN之间互通

热门文章

  1. python怎么识别鼠标的动作_Python捕捉和模拟鼠标事件的方法
  2. 已经2022年了为什么还是有人不知道网上投稿发新闻的方法?
  3. 简单讲解memmove函数
  4. 洛谷Markdown怎么用
  5. idea建立java文件夹_IDEA 创建多级文件夹的操作
  6. kali怎么设置成中文
  7. 实验吧——密码学-变异凯撒
  8. GitHub标星百万的程序员转架构之路,竟被阿里用作内部晋升参考
  9. Tbox 相关名词总结
  10. 程序员注意了:21种坏习惯悄悄使你寿命减短