以上使用到了collectingAndThen()根据属性进行去重的操作,进行结果集的收集,收集到结果集之后再进行下一步的处理。在这个去重操作中还用到了toCollection、TreeSet两个操作。2.限制长度(limit)看源码中需要传的参数有两个,第一个参数是Collector的子类,所以Collectors类中的大多数方法都能使用,比如:toList(),toSet(),toMap()等,当然也包括collectingAndThen()。第二个参数是一个Function函数,也是去重的关键,用到的ArrayList::new调用到了ArrayList的有参构造。Function函数是R apply(T t),在第一个参数downstream放在第二个参数Function函数的参数里面,将结果设置为t。对于toCollection是一个通用的方法,满足treeSet收集集合,再传入需要根据某个属性进行比较的比较器,就能达到去重的效果。复制代码
- List<User> userList = Arrays.asList(
- new User(1, "xw", "女", 21),
- new User(2, "zgx", "男", 21),
- new User(3, "whb", "男", 23),
- new User(4, "gag", "男", 30),
- new User(4, "gbg", "男", 30),
- new User(4, "gcg", "女", 30),
- new User(5, "yda", "男", 22),
- new User(6, "bhm", "女", 23),
- new User(7, "lsn", "女", 22),
- new User(8, "ksj", "女", 22)
- );
- ArrayList<User> collect1 = userList.stream().collect(Collectors.collectingAndThen(
- Collectors.toCollection(() -> new TreeSet<>(
- Comparator.comparing(
- User::getId))), ArrayList::new));
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |