码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【JDK 8 -收集和统计】7.1 collector 收集器


    一、collect()方法

    二、两个重载方法

    2.1 方法一

    2.2 方法二(常用)

    三、Collector 的 作用

    四、Collectors 的作用

    > Collectors.toList() 

    > Collectors.toMap()

    > Collectors.toSet()

    > Collectors.toCollection() : 用自定义的实现Collection的数据结构收集

    五、实战

    Stage 1:准备工作,实体类实现Comparable接口

    Stage 2:示例

    执行结果


    一、collect()方法

    • 【终端操作】用于对流中的数据进行归集操作

    • collect方法接受的参数是一个Collector

    二、两个重载方法

    • 在Stream接口里面

    2.1 方法一

    1. R collect(Supplier supplier,
    2. BiConsumersuper T> accumulator,
    3. BiConsumer combiner);

    2.2 方法二(常用)

      R collect(Collectorsuper T, A, R> collector);

    三、Collector 的 作用

    • 就是收集器,也是一个接口,它的工具类Collectors提供了很多工厂方法

    四、Collectors 的作用

    • 工具类,提供了很多常见的收集器实现

    > Collectors.toList() 

    • ArrayList::new,创建一个ArrayList作为累加器

    • List::add,对流中元素的操作就是直接添加到累加器中

    • reduce 操作,对子任务归集结果addAll,后一个子任务的结果直接全部添加到前一个子任务结果中

    • CH_ID 是一个unmodifiableSet集合

    > Collectors.toMap()

    > Collectors.toSet()

    > Collectors.toCollection() : 用自定义的实现Collection的数据结构收集

    • Collectors.toCollection (LinkedList::new)

    • Collectors.toCollection (CopyOnWriteArrayList::new)

    • Collectors.toCollection (TreeSet::new)

    五、实战

    Stage 1:准备工作,实体类实现Comparable接口

    • TreeSet 的特点是可排序、不重复,即TreeSet要求存放的对象必须是可排序的。如果对象之间不可排序,就会抛出这个异常(cannot be cast to java.lang.Comparable )。

    1. package com.learning.javalearning.lambda.chapter5;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. @NoArgsConstructor
    6. @AllArgsConstructor
    7. @Data
    8. public class User implements Comparable {
    9. private int id;
    10. private String name;
    11. private String pwd;
    12. private int age;
    13. @Override
    14. public int compareTo(User o) {
    15. int cmp = age - o.age;
    16. return cmp != 0 ? cmp : name.compareTo(o.name);
    17. }
    18. @Override
    19. public String toString() {
    20. return "User{" +
    21. "id=" + id +
    22. ", name='" + name + '\'' +
    23. ", pwd='" + pwd + '\'' +
    24. ", age=" + age +
    25. '}';
    26. }
    27. public User(String name, int age) {
    28. this.name = name;
    29. this.age = age;
    30. }
    31. public User(int id, String name, String pwd) {
    32. this.id = id;
    33. this.name = name;
    34. this.pwd = pwd;
    35. }
    36. public User(int id, String name, int age) {
    37. this.id = id;
    38. this.name = name;
    39. this.age = age;
    40. }
    41. }

    Stage 2:示例

    1. import com.learning.javalearning.lambda.chapter5.User;
    2. import java.util.*;
    3. import java.util.concurrent.CopyOnWriteArrayList;
    4. import java.util.stream.Collectors;
    5. public class CollectDemo {
    6. public static void main(String[] args) {
    7. List list = Arrays.asList(new User(1, "陆小凤", 19),
    8. new User(2, "西门吹雪", 20),
    9. new User(3, "西门吹雪", 20),//思考为什么返回TreeSet这个User会删除
    10. new User(4, "叶孤城", 20));
    11. List result = list.stream().collect(Collectors.toList());
    12. System.out.println("【不常用】Collectors.toCollection()返回自定义类型:如 Linkedlist");
    13. List linkedList = list.stream().collect(Collectors.toCollection(LinkedList::new));
    14. List copyOnWriteArrayList = list.stream().collect(Collectors.toCollection(CopyOnWriteArrayList::new));
    15. Set treeSet = list.stream().collect(Collectors.toCollection(TreeSet::new));
    16. System.out.println("LinkedList:" + linkedList);
    17. System.out.println("CopyOnWriteArrayList:" + copyOnWriteArrayList);
    18. System.out.println("TreeSet:" + treeSet);
    19. System.out.println("【常用】直接返回:Collectors.toXXX()");
    20. List list1 = list.stream().collect(Collectors.toList());
    21. Set set = list.stream().collect(Collectors.toSet());
    22. Map map = list.stream().collect(Collectors.toMap(User::getId, User::getName));
    23. System.out.println("toList:" + list1);
    24. System.out.println("toSet():" + set);
    25. System.out.println("toMap():" + map);
    26. }
    27. }

    执行结果

     

    六、参考

    如何解决 cannot be cast to java.lang.Comparable问题?_msg1_的博客-CSDN博客

  • 相关阅读:
    keycloak~网站对接到Keycloak的步骤
    k8s-master 高可用
    TRC天然拟胆碱生物碱丨艾美捷TRC盐酸乙环胺
    瀑布流 - Vue3基于Grid布局简单实现一个瀑布流组件
    电子电路学习笔记之NCV84120DR2G——车规级单通道高压侧驱动器
    JavaSE——数组习题
    Kafka3.0.0版本——消费者(消费者组案例)
    GNSS/IMU 定位模块实验
    MQTT基础--服务质量 (QoS) 0,1 和 2:第 6 部分
    为什么创建 Redis 集群时会自动错开主从节点?
  • 原文地址:https://blog.csdn.net/ladymorgana/article/details/133079993
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号