栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

大家好,我是工藤学编程 黎大二在读
作业侠系列最新文章Java实现聊天程序
一起备战ccf-csp与蓝桥杯系列最新文章一起备战蓝桥杯与CCF-CSP之大模拟炉石传说
一起刷算法与数据结构正在准备中

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

目录:

  1. Java新特性玩转JDK8之流Stream实战
    1.1 jdk8里面的流stream里的map和filter函数的使用
    1.2 流stream里的limit和sorted函数的使用
  2. jdk8里面的收集器collector
    2.1 收集器joining函数
    2.2 分组 Collectors.groupingBy

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

  • 什么是stream

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

  • 操作详情

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

  • 快速上⼿

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

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

执行结果:

是不是特别简单

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

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

UserDTO

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDTO {
    private Integer userId;
    private String userName;

}

操作代码:

 public static void testDOToDTO(){
        List 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 userDTOList = list.stream().map(obj -> {
            UserDTO userDTO = new UserDTO(obj.getId(), obj.getName());
            return userDTO;
        }).collect(Collectors.toList());
        System.out.println(userDTOList);
    }

结果:

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

结果如下:

还有我:
哈哈哈,不信?不信你看:

  • 流stream里的limit和sorted函数的使用
    排序(默认升序):
    根据长度排序:
public static void testSortAndLimit(){
        List list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");
        List resultList =
        list.stream().sorted(Comparator.comparing(obj ->
                obj.length())).collect(Collectors.toList());

        System.out.println(resultList);
    }

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

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

        System.out.println(resultList);
    }

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

public static void testSortAndLimit(){
        List list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");
        List 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,+号拼接,有了这个妈妈再也不用担心你会这样写了

代码:

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

    }

默认直接拼接:
大阪黑鸡说像以加号连接他们,安排

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

    }

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

  • 分组 Collectors.groupingBy()

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

 public static void testGroupBy(){
        List list = Arrays.asList("工藤新一", "工藤学编程",
                "工藤静香", "公摊", "公投", "工具人", "工具狗", "工具毛");

             Map>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();
                }
                );

    }

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007037.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号