首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >五分钟学会 Java高级核心之玩转 JDK8 集合框架

五分钟学会 Java高级核心之玩转 JDK8 集合框架

作者头像
工藤学编程
发布2025-12-22 09:10:08
发布2025-12-22 09:10:08
930
举报

大家好,我是工藤学编程 🦉

大二在读

作业侠系列最新文章😉

Java实现聊天程序

一起备战ccf-csp与蓝桥杯系列最新文章🐷

一起备战蓝桥杯与CCF-CSP之大模拟炉石传说

一起刷算法与数据结构🐷

正在准备中

本篇文章讲的是 Java高级级核心之玩转 JDK8 集合框架,包含Stram,collector实战,希望对大家有帮助,这些都是Java编程中的利器

Java新特性玩转JDK8之流Stream实战

  • 什么是stream

Stream 中文称为 “流”,通过将集合转换为这么⼀种叫做 “流”的元素队列,通过声明性方式,能够对集合中的每个元素进行⼀系列并行或串行的流水线操作 元素是特定类型的对象,所以元素集合看作⼀种流, 流在管道中传输, 且可以在管道的节点上进行处理, 比如 排序,聚合,过滤等操作

  • 操作详情

数据元素便是原始集合,如List、Set、Map等生成流,可以是串行流stream() 或者并行流 parallelStream()中间操作,可以是 排序,聚合,过滤,转换等 终端操作,很多流操作本身就会返回⼀个流,所以多个操作可以直接连接起来,最后统⼀进行收集

  • 快速上⼿

给大家先来给开胃菜,比如某博主(我不说是谁)很想涨粉,但是现在涨粉的名单上没有他,他改怎么办?口嗨!

代码语言:javascript
复制
void testStream() {
        List<String> list = Arrays.asList("涨粉", "涨100粉", "涨1000粉", "涨10000粉", "涨100000粉");
        List<String> resultList = list.stream().map(obj -> "工藤学编程想" + obj).collect(Collectors.toList());
        System.out.println(resultList);
    }

执行结果:

在这里插入图片描述
在这里插入图片描述

是不是特别简单

jdk8里面的流stream里的map和filter函数的使用

  • map函数 将流中的每⼀个元素 T 映射为 R(类似类型转换) 上面的的例子就是,类似遍历集合,对集合的每个对象做处理 换个场景:转换对象,如javaweb开发中集合里面的DO对象转换为DTO对象 代码实操: UserDO
代码语言:javascript
复制
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDO {
    private Integer id;
    private String name;
    private String pwd;
}

UserDTO

代码语言:javascript
复制
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDTO {
    private Integer userId;
    private String userName;

}

操作代码:

代码语言:javascript
复制
 public static void testDOToDTO(){
        List<UserDO> list = Arrays.asList(new UserDO(1, "⼩东", "123"), new
                        UserDO(21, "jack", "rawer"),
                new UserDO(155, "tom", "sadfsdfsdfsd"),
                new UserDO(231, "marry", "234324"), new UserDO(100, "工藤学编程", "122223"));
        List<UserDTO> userDTOList = list.stream().map(obj -> {
            UserDTO userDTO = new UserDTO(obj.getId(), obj.getName());
            return userDTO;
        }).collect(Collectors.toList());
        System.out.println(userDTOList);
    }

结果:

在这里插入图片描述
在这里插入图片描述
  • filter函数 用于通过设置的条件过滤出元素 需求:过滤出字符串中包含"工藤"的字符串 代码如下:
代码语言:javascript
复制
public static void testFilter(){
        List<String> list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");
        List<String> resultList = list.stream().filter(obj -> obj.contains("工藤")).collect(Collectors.toList());
        System.out.println(resultList);
    }

结果如下:

还有我:

哈哈哈,不信?不信你看:

在这里插入图片描述
在这里插入图片描述
  • 流stream里的limit和sorted函数的使用 排序(默认升序): 根据长度排序:
代码语言:javascript
复制
public static void testSortAndLimit(){
        List<String> list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");
        List<String> resultList =
        list.stream().sorted(Comparator.comparing(obj ->
                obj.length())).collect(Collectors.toList());

        System.out.println(resultList);
    }

结果:

在这里插入图片描述
在这里插入图片描述

此时一只大阪黑鸡告诉我,他想降序怎么搞,我直接告诉他 你这样操作就行了

代码语言:javascript
复制
 List<String> list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");
        List<String> resultList =
        list.stream().sorted(Comparator.comparing(obj ->
                obj.length(),Comparator.reverseOrder())).collect(Collectors.toList()
        );

        System.out.println(resultList);
    }
在这里插入图片描述
在这里插入图片描述

此时,大版黑鸡又说,工藤,我只想要前3个怎么办? 安排:

代码语言:javascript
复制
public static void testSortAndLimit(){
        List<String> list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");
        List<String> resultList =
                list.stream().sorted(Comparator.comparing(String::length).reversed()
                ).limit(3).collect(Collectors.toList());
        System.out.println(resultList);
        
    }
在这里插入图片描述
在这里插入图片描述

完事 之后,黑鸡对我说,不亏是关东第一名侦探

请添加图片描述
请添加图片描述

jdk8里面的收集器collector

  • collect()方法的作用 ⼀个终端操作, ⽤于对流中的数据进行归集操作 Collectors.toList() Collectors.toMap() Collectors.toSet() Collectors.toCollection() :⽤自定义的实现Collection的数据结构收集 Collectors.toCollection(LinkedList::new) Collectors.toCollection(CopyOnWriteArrayList::new) Collectors.toCollection(TreeSet::new)
  • 收集器joining函数 不知道大家在字符串并且的时候是不是还用循环,StringBuild,+号拼接,有了这个妈妈再也不用担心你会这样写了

代码:

代码语言:javascript
复制
public static void testJoin(){
        List<String> list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");
        String resultList =
                list.stream().collect(Collectors.joining());
        System.out.println(resultList);

    }

默认直接拼接:

在这里插入图片描述
在这里插入图片描述

大阪黑鸡说像以加号连接他们,安排

代码语言:javascript
复制
public static void testJoin(){
        List<String> list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");
        String resultList =
                list.stream().collect(Collectors.joining("+"));
        System.out.println(resultList);

    }
在这里插入图片描述
在这里插入图片描述

是不是有了这个方法特别方便!

请添加图片描述
请添加图片描述
  • 分组 Collectors.groupingBy()

实操代码,将含有工藤的分为一组

代码语言:javascript
复制
 public static void testGroupBy(){
        List<String> list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");

             Map<Boolean,List<String>>listMap = list.stream().collect(Collectors.groupingBy(obj->obj.contains("工藤")));
        listMap.forEach((k,v)->{
                    System.out.println(k);
                    v.forEach((obj)->{
                        System.out.print(obj);
                    });
                    System.out.println();
                }
                );

    }
在这里插入图片描述
在这里插入图片描述

好了,今天就到这里吧,希望大家给个三连哦!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档