Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JAVA8 stream() 总结归纳

JAVA8 stream() 总结归纳

作者头像
iiopsd
发布于 2022-12-23 00:49:11
发布于 2022-12-23 00:49:11
34500
代码可运行
举报
文章被收录于专栏:iiopsd技术专栏iiopsd技术专栏
运行总次数:0
代码可运行

stream() 将数组转换为数据流,提供排序、去重、类型转换、过滤等多种操作方法,使代码更加简洁高效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class StreamTest {

    List<Integer> list = Arrays.asList(6, 3, 0, 7, 1, 2, 5, 1);
    int[] arr = new int[]{6, 3, 0, 7, 1, 2, 5, 1};
    /**
     * 排序
     *
     * 重点掌握两种写法:
     * list.stream().sorted((a, b) -> (a -b)).collect(Collectors.toList());
     * Collections.sort(list2, (a, b) -> b.compareTo(a));
     */
    @Test
    public void testSort() {
        // 升序
        System.out.println(list.stream().sorted().collect(Collectors.toList()));
        System.out.println(list.stream().sorted(Comparator.comparing(Integer::intValue)).collect(Collectors.toList()));
        System.out.println(list.stream().sorted((a, b) -> (a - b)).collect(Collectors.toList()));
        // 降序
        System.out.println(list.stream().sorted(Comparator.comparing(Integer::intValue).reversed()).collect(Collectors.toList()));
        System.out.println(list.stream().sorted((a, b) -> (b - a)).collect(Collectors.toList()));
        System.out.println(list.stream().sorted((a, b) -> b.compareTo(a)).collect(Collectors.toList()));


        // 扩展其他升序
        List<Integer> list1 = Arrays.asList(6, 3, 0, 7, 1, 2, 5, 1);
        Collections.sort(list1);
        System.out.println(list1);

        List<Integer> list2 = Arrays.asList(6, 3, 0, 7, 1, 2, 5, 1);
        Collections.sort(list2, (a, b) -> (a -b));
        System.out.println(list2);

        // 扩展其他降序
        List<Integer> list3 = Arrays.asList(6, 3, 0, 7, 1, 2, 5, 1);
        Collections.sort(list3, (a, b) -> (b - a));
        System.out.println(list3);
    }

    /**
     * 装箱操作int[] -> List<Integer>
     */
    @Test
    public void testBoxed() {
        List<Integer> list1 = Arrays.stream(arr).boxed().collect(Collectors.toList());
        System.out.println(list1);
    }

    /**
     * 最大值
     */
    @Test
    public void testMaxAndMin() {
        // 正确的写法
        System.out.println(list.stream().max(Integer::compare).get());
        System.out.println(list.stream().mapToInt(Integer::intValue).max().getAsInt());
        System.out.println(Arrays.stream(arr).max().getAsInt());
        System.out.println(Arrays.stream(arr).min().getAsInt());

        // 错误的写法 stream 的max() 和min() 方法是通过判断结果大于或者小于0进行判断的
//        List<Integer> list1 = Arrays.asList(2, 3, 0, 7, 1, -2, 5, 6);
        System.out.println(list.stream().max(Integer::max).get());
        System.out.println(list.stream().min(Integer::min).get());

    }

    /**
     * 使用示例
     */
    @Test
    public void testCollectors() {
        List<String> strList = Arrays.asList("sdkj1", "dhe", "sdfi2", "nvi", "ndfsk", "dfsdf", "1i2jd", "dsjfl", "11", "11");

        // distinct() 去重
        strList = strList.stream().distinct().collect(Collectors.toList());
        System.out.println(strList);

        // filter() 过滤
        List<String> str1 = strList.stream().filter(e -> e.contains("1")).collect(Collectors.toList());
        System.out.println(str1);

        //map() 方法用于映射每个元素到对应的结果
        List<String> str2 = strList.stream().map(m -> m = m + "map").collect(Collectors.toList());
        System.out.println(str2);


        // limit() 获取指定数量
        System.out.println(strList.stream().limit(3).collect(Collectors.toList()));
        // skip() 跳过指定数量
        System.out.println(strList.stream().skip(3).collect(Collectors.toList()));



        List<Map<String , String>> mapList = new ArrayList<>();
        Map<String, String> m1 = new HashMap<>();
        Map<String, String> m2 = new HashMap<>();
        Map<String, String> m3 = new HashMap<>();

        m1.put("name", "张三");
        m2.put("name", "张三");
        m3.put("name", "王五");
        m1.put("age", "22");
        m2.put("age", "33");
        m3.put("age", "22");
        mapList.add(m1);
        mapList.add(m2);
        mapList.add(m3);

        // Collectors.toList() 返回List
        System.out.println(mapList.stream().map(m -> m.get("name")).collect(Collectors.toList()));

        // Collectors.toSet() 返回Set
        System.out.println(mapList.stream().map(m -> m.get("age")).collect(Collectors.toSet()));

        // Collectors.joining() 拼接数据返回字符串
        System.out.println(mapList.stream().map(m -> m.get("name")).collect(Collectors.joining()));
        System.out.println(mapList.stream().map(m -> m.get("name")).collect(Collectors.joining(",")));

        // Collectors.toMap 返回Map {李四={name=李四, age=33}, 张三={name=张三, age=22}, 王五={name=王五, age=22}}
        // 第三个参数(a, b) -> a 代表如果遇到相同的key 取第一个值,如果没有设置此参数,重复key 会出错 java.lang.IllegalStateException: Duplicate key
        // 第三个参数(a, b) -> b 代表如果遇到相同的key 取最后一个值
        System.out.println(mapList.stream().collect(Collectors.toMap(m -> m.get("name"), Function.identity(), (a, b) -> b)));


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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java8 Stream API
Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。
游离于山间之上的Java爱好者
2022/08/09
6260
Java8 Stream API
80个JAVA8函数式编程中关于集合的操作实例(持续更新增加实例)
map - 将集合中的每个元素映射为另一个元素 示例:将数字集合中的每个元素平方并返回平方后的集合。
青山师
2023/05/05
1K0
java8 Lambda Stream collect Collectors 常用实例
字典查询和数据转换 toMap时,如果value为null,会报空指针异常 解决办法一:
Erwin
2019/12/31
3.8K0
Java8 Stream,常用方法大合集
一、概述 二、分类 三、具体用法 1.流的常用创建方法 2.流的中间操作 3.流的终止操作
鱼找水需要时间
2023/02/16
4430
Java8 Stream,常用方法大合集
java工程师要会的大数据之Stream流
在JDK8之前,Java是不⽀持函数式编程的,所谓的函数编程,即可理解是将⼀个函数(也称为“⾏ 为”)作为⼀个参数进⾏传递, ⾯向对象编程是对数据的抽象(各种各样的POJO类),⽽函数式编 程则是对⾏为的抽象(将⾏为作为⼀个参数进⾏传递
Joseph_青椒
2023/08/09
7810
JAVA Stream小结
Stream API可以极大提高Java程序员的生产力, 让程序员写出高效率、干净、简洁的代码.
一个架构师
2022/06/20
4940
JAVA Stream小结
Java8 Stream
Java Stream函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合类数据的效率。
HLee
2021/08/12
1.7K0
Java8 Stream
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。
云深i不知处
2020/11/12
3.6K0
Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
Java8 Stream api 入门
Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。
呼延十
2019/07/01
7200
Java8新特性之Stream流(含具体案例)
Stream 流是 Java 8 新提供给开发者的一组操作集合的 API,将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选、排序、聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由终端操作 (terminal operation) 得到前面处理的结果。Stream 流可以极大的提高开发效率,也可以使用它写出更加简洁明了的代码。我自从接触过 Stream 流之后,可以说对它爱不释手。
军军不吃鸡
2022/10/26
2.7K1
Java8新特性之Stream流(含具体案例)
探究Java8的Stream(二)
“ 在上一篇的文章中,我们聊到Stream创建的四种方式,以及中间操作筛选与切片,那么今天我们来看一下映射和排序”
每天学Java
2020/06/01
5640
Java Stream流
stream是顺序流,由主线程按顺序对流执行操作; parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,如果对流中的数据处理没有顺序要求就可以使用并行流。(一般不建议使用并行流,不熟悉的话很容易踩坑,使用情况经常是弊大于利) 例如筛选集合中的奇数,两者的处理不同之处:
十玖八柒
2022/08/01
3K1
Java Stream流
Java8 Stream简介
Stream是Java 8新增的重要特性, 它提供函数式编程支持并允许以管道方式操作集合. 流操作会遍历数据源, 使用管道式操作处理数据后生成结果集合, 这个过程通常不会对数据源造成影响.
用户7353950
2022/05/10
3510
Java 8 Stream常用方法学习
Stream流是 Java8 API 新增的一个处理集合的关键抽象概念,是一个来自数据源的元素队列并支持聚合操作。以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。
全栈程序员站长
2022/11/09
1.1K0
Java 8 Stream常用方法学习
玩转Java8 Stream流
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/08/31
5330
玩转Java8 Stream流
java8
Day1: ---- 1. Lambda表达式 Lambda表达式的基本结构: (param1,param2,param3,paramN) ->{body} 关于函数式接口: 如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口。 如果我们在某个接口上声明了FunctionalInterface注解,那么编译器就会按照函数式接口的定义来要求该接口。 如果某个接口只有一个抽象方法,但我们没有给该接口声明FunctionalInterface注解,那么编译器依旧会将该接口看作是函数式接口。 ps(为什
如来
2020/07/14
8540
Java8新特性之Lambda与Stream流
   Java 8 API添加了一个新的抽象称为流Stream,stream是用于对集合迭代器的增强,使之能够更高效的完成聚合操作(筛选、排序、统计分组)或者大批量数据操作。    元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
程序员云帆哥
2022/05/12
3710
Java8新特性之Lambda与Stream流
java 1.8 stream使用总结(个人总结有一些经典文章的集合)
☀️相关笔记章节: 🌹java 1.8 stream使用总结(个人总结有一些经典文章的集合) 🌹遍历 ArrayList和遍历 Map的几种方式 🌹Java对象,Map,List,Set数组等相互转换大全(详细讲解,附代码,讲解案例) 🌹List,Map多层循环嵌套Demo及其理解 🌹List,Map 三种遍历方式:(总结理解) 🌹List<Map<String, Object>>,Map<String,List<Map<String, Object>>>多方式循环遍历
默 语
2024/11/20
1820
java 1.8 stream使用总结(个人总结有一些经典文章的集合)
Java中Stream操作
Stream是Java 8 API添加的一个新的抽象,称为流Stream,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式)
码客说
2023/03/06
5060
java8 stream api流式编程
💛完整源码,请帮我点个star哦! java8自带常用的函数式接口 Predicate<T> boolean test(T t) 传入一个参数返回boolean值 Consumer<T> void accept(T t) 传入一个参数,无返回值 Function<T,R> R apply(T t) 传入一个参数,返回另一个类型 准备数据 //计算机俱乐部 private static List<Student> computerClub = Arrays.asList(
海向
2021/01/18
7620
java8 stream api流式编程
相关推荐
Java8 Stream API
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验