Java基础进阶

news2024/12/30 2:07:57

Stream流

引例
需求:按照下面要求完成集合的创建和遍历
创建一个集合,存储多个字符串元素
1. 把所有以“曹”开头的元素存储到新集合中
2. 把曹开头,长度为3的元素存储到新集合中

 List<String> list = List.of("曹操", "曹孟德", "曹子恒", "曹子建", "司马懿", "司马师", "司马昭", "曹丕");

        // 1. 把所有以“曹”开头的元素存储到新集合中
        List<String> list1 = new ArrayList<>();
        for (String s : list) {
            if(s.startsWith("曹")){
                list1.add(s);
            }
        }
        System.out.println(list1);

        // 2. 把曹开头,长度为3的元素存储到新集合中
        List<String> list2 = new ArrayList<>();
        for (String s : list1) {
            if(s.length() == 3){
                list2.add(s);
            }
        }
        System.out.println(list2);

输出结果:

[曹操, 曹孟德, 曹子恒, 曹子建, 曹丕]
[曹孟德, 曹子恒, 曹子建]

上面太麻烦了
用Stream流只需要一行代码:

list.stream().filter(name -> name.startsWith("曹")).filter(name -> name.length() == 3).forEach(name -> System.out.println(name));
  • stream流的作用:结合Lamada表达式,简化集合、数组的操作
  • 使用步骤:
    • 先得到一条stream流,并把数据放上去

      获取方式方法名说明
      单列集合default Stream<E> stream()Collection中的默认方法
      双列集合无法直接使用Stream流,需要通过keySet()或entrySet()转换成单列集合
      数组public static<T> Stream stream(T[] array)Arrays工具类中的静态方法
      一堆零散数据public static<T> Stream of(T…values)Stream接口中的静态方法
    • 利用stream流中的API进行各种操作:(过滤,转换,统计,打印等等)

      • 中间方法:过滤、转换。方法调用完毕之后还可以调用其他方法
      • 终结方法:统计、打印。最后一步,调用完毕之后不能调用其他方法。
    • 使用中间方法对流水线上的数据进行操作

    • 使用终结方法对流水线上的数据进行操作

		//单列集合Stream流
        List<String> list = List.of("aa", "bb", "cc", "dd");
        list.stream().forEach(s -> System.out.println(s));

        //双列集合Stream流
        Map<String, String> map = Map.of("aa", "11", "bb", "22", "cc", "33");
        map.entrySet().stream().forEach(m -> System.out.println(m));

        //数组Stream流
        int[] arr = {1,2,3,4,5};
        Arrays.stream(arr).forEach(a -> System.out.println(a));

        //零散数据Stream流
        Stream.of(11,12,13,14,15).forEach(s -> System.out.println(s));

注意:Stream接口中静态方法of的细节:方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组,但数组必须是引用数据类型的,如果传递基本数据类型,会把整个数组当做一个元素传到Steam流中

		int[] arr1 = {1,2,3,4,5};
        String[] arr2 = {"a", "b", "c", "d", "e"};
        Stream.of(arr1).forEach(s -> System.out.println(s)); //输出[I@7699a589
        Stream.of(arr2).forEach(s -> System.out.println(s)); //输出a b c d e
  • Stream流的终结方法

    名称说明
    void forEach(Consumer action)遍历
    long count()统计
    toArray()收集流中的数据,放到数组中
    collect(Collector collrctor)收集流中的数据,放到集合中
    1. forEach 返回值是void,因此是终结方法,不能再在后面调用函数
    • Consumer的泛型:表示流中数据的类型

    • accept方法得形态integer:依次表示流里面的每一个数据

    • 方法体:对每一个数据要做的操作(打印)

      		List<Integer> list = List.of(1,2,3,4,5);
              list.stream().forEach(new Consumer<Integer>() {
                  @Override
                  public void accept(Integer integer) {
                      System.out.println(integer);
                  }
              });
      
    1. long 返回值是long类型的整数,因此是终结方法

      long c = list.stream().count();
      System.out.println(c);
      
    2. toArray()

    • 空参:返回值是object类型

      		System.out.println("---------------------");
              Object[] arr1 = list.stream().toArray();        System.out.println(Arrays.toString(arr1));
              //
              //IntFunction的泛型:具体类型的数组
              //apply的形态:流中数据的个数,要和数组长度保持一致
              //apply函数返回值:具体类型的数组
      
              //toArray方法的参数的作用:负责创建一个指定类型的数组
              //方法底层会依次得到流里面每一个数据,并把数据放到数组中
              //方法返回值:装着流里面所有数组的数组
              String[] arr = list.stream().toArray(new IntFunction<String[]>() {
                  @Override
                  public String[] apply(int value) {
                      return new String[0];
                  }
              });
              //简化成Lamada表达式形式:
              list.stream().toArray(value -> new String[value]);
      
    • 有参:返回值是任意类型
      toArray方法的参数的作用:负责创建一个指定类型的数组
      方法底层会依次得到流里面每一个数据,并把数据放到数组中
      方法返回值:装着流里面所有数组的数组

      		//IntFunction的泛型:具体类型的数组
              //apply的形态:流中数据的个数,要和数组长度保持一致
              //apply函数返回值:具体类型的数组
      
              //toArray方法的参数的作用:负责创建一个指定类型的数组
              //方法底层会依次得到流里面每一个数据,并把数据放到数组中
              //方法返回值:装着流里面所有数组的数组
              String[] arr = list.stream().toArray(new IntFunction<String[]>() {
                  @Override
                  public String[] apply(int value) {
                      return new String[0];
                  }
              });
              //简化成Lamada表达式形式:
              list.stream().toArray(value -> new String[value]);
      
    1. collect
      在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/174084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【6s965-fall2022】剪枝✂pruningⅡ

剪枝比例 问题&#xff1a;我们应该如何找到每层的剪枝比率&#xff1f; 较浅的层&#xff0c;低层次的特征较深的层&#xff0c;抽象的特征 问题&#xff1a;哪些层的冗余度最高&#xff1f; 非统一剪枝&#xff08;每一层的稀疏度不一样&#xff09;比统一剪枝&#xff0…

python学习 --- 集合基础

目录 一、什么是集合&#xff1f; 二、集合的创建方式 1、直接使用{} 2、使用内置函数set() 三、集合的相关操作 1、集合元素的判断 2、集合元素的新增 3、集合元素的删除 四、集合间的关系 五、集合的数学操作 1、交集操作 2、并集操作 3、差集操作 4、对称差集…

基于微信小程序的校园商铺系统小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…

2022大数据产业年度“国产化优秀代表厂商”榜单发布,亚信科技AntDB数据库位列其中

国产化/信创亚信科技 ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 亚信科技也做数据库&#xff1f;实际上亚信科技AntDB是我国最早的国产数据库产品之一&#xff0c;是在21世纪初国外品牌数据库无法满足我国暴涨的通信需求的情况下&#xff0c;为了帮助通信运用商更好…

普中科技手把手教你学ESP32--基于MicroPython-02

第四讲&#xff1a;LED灯实验 MicroPython函数使用 本来需要加入machine.的&#xff0c;但是我引入了form machine import Pin就可以直接省略了 machine是一个模块&#xff0c;Pin是machine中的一个功能 Micropython官网学习 点击DOCS文档 选择相应的芯片 查看对应的模块 …

LeetCode 1801. 积压订单中的订单总数(C++)

思路&#xff1a; 该题主要是对比销售、采购的价格来进行数组\队列的pop和push操作来实现&#xff1b;采用优先队列来实现排序&#xff0c;其中销售和采购对应小队列和大队列 对于 销售 操作&#xff1b;如果采购的积压订单中有出价格比自己的销售价格高&#xff0c;就出 对于 …

C++设计模式(7)——外观模式

外观模式 亦称&#xff1a; Facade 意图 外观模式是一种结构型设计模式&#xff0c; 能为程序库、 框架或其他复杂类提供一个简单的接口。 问题 假设你必须在代码中使用某个复杂的库或框架中的众多对象。 正常情况下&#xff0c; 你需要负责所有对象的初始化工作、 管理其…

29.Isaac教程--调整导航

调整导航 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录调整导航定位器全局规划器局部规划器控制器定位器 定位器是导航堆栈的关键部分&#xff0c;因为了解机器人的位置对于正确导航到目的地至关重要。 因此&#xff0c;快速准确的定…

2、threejs官网本地化部署启动和Parcel热加载:Web应用打包工具介绍及使用

一、Three.js 官网 背景&#xff1a; threejs 是国外的网站&#xff0c;访问有时候比较卡&#xff0c;所以建议本地化部署启动一下&#xff0c;方便随时访问学习。 部署方案&#xff1a; 1、访问Threejs官网 2、点击github 选择 dev版本下载 3、下载完之后&#xff0c;解压…

Java中的this关键字

介绍 this关键字用于引用当前实例&#xff0c;在Java语言中&#xff0c;当创建一个对象后&#xff0c;Java虚拟机就会为其分配一个指向对象本身的指针&#xff0c;这个指针就是“this”。 Java关键字this只能用于方法方法体内&#xff0c;在类中的非静态方法中使用&#xff0…

14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)

本篇主要是集合框架基础和List集合&#xff0c;Map集合等等后续更 集合14.1 集合框架14.1.1 概念14.1.2 集合架构14.2 Collection接口14.2.1 常用方法14.3 迭代器14.3.1 迭代器原理14.3.2 迭代器使用常见问题14.4 泛型基本使用14.5 ArrayList类14.5.1 常用方法14.5.2 实现原理1…

【手写 Vue2.x 源码】第三十三篇 - diff算法-收尾+阶段性总结

一&#xff0c;前言 上篇&#xff0c;diff算法-乱序比对&#xff0c;主要涉及以下几个点&#xff1a; 介绍了乱序比对的方案介绍了乱序比对的过程分析实现了乱序比对的代码逻辑 本篇&#xff0c;diff 算法的阶段性梳理 二&#xff0c;初渲染与视图更新流程 Vue 初渲染时&…

注册商标需要哪些材料和条件?

申请注册商标条件是什么1、申请人必须是申请认定商标的所有人&#xff0c;是在当省区域内的自然人、法人和其他组织;2、该商标自核准注册之起连续使用满三年并继续有效&#xff0c;且无权属争议;3、该商标为相关公众所熟知&#xff0c;在相关市场内具有较高的知名度;4、该商标核…

亚信科技AntDB数据库荣获2022年度技术卓越奖

近日&#xff0c;业界知名IT垂直媒体IT168发布了“2022技术卓越奖”主题奖项&#xff0c;亚信科技AntDB数据库荣获技术卓越奖。 2022 “技术卓越奖”由行业CIO/CTO大咖、技术专家及IT媒体三方联合评选&#xff0c;评判标准代表了用户和媒体声音。经过多方评审&#xff0c;亚信科…

jvm参数简介

Xmx3550m&#xff1a;设置JVM最大堆内存为3550M。 -Xms3550m&#xff1a;设置JVM初始堆内存为3550M。此值可以设置与-Xmx相同&#xff0c;以避免每次垃圾回收完成后JVM重新分配内存。 -Xss128k&#xff1a;设置每个线程的栈大小。JDK5.0以后每个线程栈大小为1M&#xff0c;之…

【SCL】1200应用案例:交通灯模拟自动装料控制

使用博图SCL语言来编写 交通灯模拟控制 和 自动装料应用案例 文章目录 目录 前言 一、应用&#xff1a;交通灯模拟控制 1.控制要求 2.I\o分配和接线 3.程序编写和效果 4.小结 二、自动装料模拟控制 1.控制要求 2.I/O分配 3.程序编写 4.小结 总结 前言 本篇文章我们继续学习西…

宏任务和微任务

宏任务和微任务1. 什么是宏任务和微任务2. 宏任务和微任务的执行顺序3. 去银行办业务的场景4. 分析以下代码输出的顺序5. 经典面试题1. 什么是宏任务和微任务 JavaScript 把异步任务又做了进一步的划分&#xff0c;异步任务又分为两类&#xff0c;分别是&#xff1a; ① 宏任…

寄存器、RAM、ROM、Flash

单片机寄存器简述 寄存器详细请点这里 1、单片机寄存器就是单片机片内存储器&#xff08;片内RAM)一部分&#xff0c;每一个都有地址。只不过这几个寄存器有特殊的作用&#xff0c;比如指令&#xff1a;MUL AB,这条指令用到两个寄存器A,B进行乘法&#xff0c;结果存到BA里面&a…

kaggle竞赛 | Quora Insincere Question | 文本情感分析

目录赛题背景赛题评价指标数据集分析pytorch建模之前发布了一遍实战类的情感分析的文章&#xff0c;包括微博爬虫&#xff0c;数据分析&#xff0c;相关模型。 可以参考&#xff1a; https://blog.csdn.net/lijiamingccc/article/details/126963413 比赛链接&#xff1a; http…

Spring Boot学习篇(十二)

Spring Boot学习篇(十二) shiro安全框架使用篇(四) 2 在主页显示用户登录状态、用户信息和完成默认注销(不改shiro原来的配置)操作 2.1 变更SysUserController类 2.1.1 在SysUserController类中注入sysUserMapper Autowired SysUserMapper sysUserMapper;2.1.2 在SysUserC…