iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java集合Stream流如何使用
  • 733
分享到

Java集合Stream流如何使用

2023-07-05 05:07:56 733人浏览 薄情痞子
摘要

这篇文章主要介绍“Java集合Stream流如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java集合Stream流如何使用”文章能帮助大家解决问题。Java 中可以使用 java.util

这篇文章主要介绍“Java集合Stream流如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java集合Stream流如何使用”文章能帮助大家解决问题。

Java 中可以使用 java.util.Stream 对一个集合(实现了java.util.Collection接口的类)做各种操作,例如:求和、过滤、排序等等。

这些操作可能是中间操作——返回一个 Stream 流,或者是终端操作——返回一个结果。

流操作并不会影响原来的集合,可以简单认为,流操作是把集合中的一个元素逐个复制放到一个首尾相接的流动的水槽中。

Stream 流支持同步执行,也支持并发执行。如果我们直接获取 stream 流,得到的是同步执行的 stream 流;如果调用方法 parallelStream,则得到一个可以并发执行的 Stream 流。

注意:Map不支持 Stream 流,但是它的 KeyValue 支持,因为它们实现了 Set 接口。

事前准备

演示 Stream 流的提前准备,创建几个类以供测试

  • 新建一个工具类,方便创建集合。

  • 新建两个类,例如开发中常见的数据库实体类和 DTO 类。

 public class MyUtil {      private static List<String> list = new ArrayList<>();     private static List<Student> students = new ArrayList<>();      static {         list.add("abc");         list.add("xyz");         list.add("fgh");         list.add("abc");         list.add("def");         list.add("xyz");         list.add("efg");          Student s1 = new Student();         s1.setAge("16");         s1.setId(UUID.randomUUID().toString());         s1.setName("张三");         s1.setMajor("计算机科学与技术");         Student s2 = new Student();         s2.setAge("18");         s2.setId(UUID.randomUUID().toString());         s2.setName("李四");         s2.setMajor("物联网工程");         Student s3 = new Student();         s3.setAge("20");         s3.setId(UUID.randomUUID().toString());         s3.setName("王五");         s3.setMajor("网络工程");         students.add(s1);         students.add(s2);         students.add(s3);     }      public static List<String> getList() {         return list;     }     public static List<Student> getStudents() {         return students;     } }  public class Student {      private String id;     private String name;     private String age;     private String major;      }  public class StudentDTO {      private String name;     private String major; }

Filter

filter 可以帮助我们过滤流中的某些元素,其方法签名如下

  Stream<T> filter(Predicate<? super T> predicate);

具体使用方法如下:

 public class Main {      public static void main(String[] args) {         List<String> list = MyUtil.getList();         System.out.println("过滤操作之前:");         System.out.println(list);         // 过滤不以 a 开头的字符串,collect() 将流中的元素放到一个新的集合中         List<String> newList = list.stream().filter(s -> !s.startsWith("a")).collect(Collectors.toList());         System.out.println("-------------------------");         System.out.println("过滤操作之后:");         System.out.println(newList);     } }  ======== 输出 ========= 过滤操作之前: [abc, xyz, fgh, abc, def, xyz, efg] ------------------------- 过滤操作之后: [xyz, fgh, def, xyz, efg]

Sorted

sorted 可以帮助我们排序流中的元素,方法签名如下:

  Stream<T> sorted(Comparator<? super T> comparator);

具体使用方法如下:

 public class Main {      public static void main(String[] args) {         List<String> list = MyUtil.getList();         System.out.println("排序操作之前:");         System.out.println(list);         List<String> newList = list.stream().sorted().collect(Collectors.toList());         System.out.println("-------------------------");         System.out.println("排序操作之后:");         System.out.println(newList);         System.out.println("自定义排序:");         // 倒序排序。 forEach 方法可以用传入的方法 逐个 处理流中的元素         list.stream().sorted((s1, s2)-> -s1.compareTo(s2)).forEach(System.out::println);     } }  ======== 输出 ========= 排序操作之前: [abc, xyz, fgh, abc, def, xyz, efg] ------------------------- 排序操作之后: [abc, abc, def, efg, fgh, xyz, xyz] 自定义排序: xyz xyz fgh efg def abc abc

Map

Map 操作可以帮助我们将流中的一类元素映射为另一类元素,最典型的应用就是可以用来将数据库实体类转换为供前端使用的 DTO 类。方法签名如下:

  <R> Stream<R> map(Function<? super T, ? extends R> mapper);

具体使用方法如下:

 public class Main {      public static void main(String[] args) {         List<Student> students = MyUtil.getStudents();         System.out.println("map 操作之前");         System.out.println(students);         // collect 方法可以将流中的元素收集到一个 Collection 中,如果有去除重复元素的需求,可以考虑收集到 Set 中         List<StudentDTO> dtos = students.stream().map(student -> {             StudentDTO dto = new StudentDTO();             dto.setName(student.getName());             dto.setMajor(student.getMajor());             return dto;         }).collect(Collectors.toList());         System.out.println("-------------------------");         System.out.println("map 操作之后");         System.out.println(dtos);     } }  ======== 输出 ========= map 操作之前 [Student{id='cb5726cd-e73a-443e-95e5-155aa6e876ae', name='张三', age='16', major='计算机科学与技术'}, Student{id='94478bae-b2ee-4c43-bac0-12f45f4099cd', name='李四', age='18', major='物联网工程'}, Student{id='5fdd9e19-f7cf-4c61-b506-0ef58a36dcbe', name='王五', age='20', major='网络工程'}] ------------------------- map 操作之后 [StudentDTO{name='张三', major='计算机科学与技术'}, StudentDTO{name='李四', major='物联网工程'}, StudentDTO{name='王五', major='网络工程'}]

Match

  // 只要集合中有一个匹配,就返回 true boolean anyMatch(Predicate<? super T> predicate); // 集合中所有元素都匹配,才返回 true boolean allMatch(Predicate<? super T> predicate); // 集合中所有元素都不匹配,返回 true boolean noneMatch(Predicate<? super T> predicate);

具体使用方法如下:

 public class Main {      public static void main(String[] args) {         List<String> list = MyUtil.getList();         System.out.println("集合中的所有元素是否都以 a 开头");         System.out.println(list.stream().allMatch(s -> s.startsWith("a")));          System.out.println("集合中是否存在元素以 a 开头");         System.out.println(list.stream().anyMatch(s -> s.startsWith("a")));          System.out.println("集合中的元素是否都不以 a 开头(相当于 allMatch 的取反):");         System.out.println(list.stream().noneMatch(s -> s.startsWith("a")));     } }  ======== 输出 ========= 集合中的所有元素是否都以 a 开头 false 集合中是否存在元素以 a 开头 true 集合中的元素是否都不以 a 开头(相当于 allMatch 的取反): false

Count

  long count();

具体使用方法如下:

 public class Main {      public static void main(String[] args) {         List<String> list = MyUtil.getList();         System.out.println(list);         System.out.println("集合中的个数:" + list.size());          long count = list.stream().filter(s -> s.startsWith("a")).count();         System.out.println("集合中以 a 开头的元素个数:" + count);     } }  ======== 输出 ========= [abc, xyz, fgh, abc, def, xyz, efg] 集合中的个数:7 集合中以 a 开头的元素个数:2

Reduce

  Optional<T> reduce(BinaryOperator<T> accumulator);

具体使用方法如下:

 public class Main {      public static void main(String[] args) {         List<String> list = MyUtil.getList();         // 可以理解为减少集合的个数,对集合中的元素不断进行累加,最终只得到一个元素         // 例如对数字集合进行累加进行求和         String s = list.stream().reduce((s1, s2) -> s1 + "###" + s2).get();         System.out.println(s);     } }  ======== 输出 ========= abC###xyz###fgh###abc###def###xyz###efg

关于“Java集合Stream流如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Java集合Stream流如何使用

本文链接: https://www.lsjlt.com/news/349588.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java集合Stream流如何使用
    这篇文章主要介绍“Java集合Stream流如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java集合Stream流如何使用”文章能帮助大家解决问题。Java 中可以使用 java.util...
    99+
    2023-07-05
  • 使用Stream流对集合排序
    文章目录 0 写在前面1 格式1.1 介绍:1.2 单个属性排序格式:1.3 多个属性排序格式:1.4 注意事项 2 代码举例 0 写在前面 有一些业务需要对集合按照一些规则进行排序,...
    99+
    2023-09-11
    java 数据库 开发语言
  • Java中list集合stream流去重
    Java中list集合stream流去重 1. List单个字段去重 list.stream().distinct().collect(Collectors.toList()); 2. List对象...
    99+
    2023-09-15
    java jvm servlet
  • Java 中如何使用 stream 流
    目录前言一、筛选和切片1.1、筛选 filter1.2、去重 distinct1.3、切片 limit1.4、跳过元素 skip1.5、排序 sorted1.6、小结与综合应用二、映...
    99+
    2024-04-02
  • Java的Stream流如何使用
    这篇文章主要介绍“Java的Stream流如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java的Stream流如何使用”文章能帮助大家解决问题。简介说明JDK8新增了Stream(流操作)...
    99+
    2023-06-30
  • Java8 Stream 流常用方法合集
    目录一、概述二、分类三、具体用法1. 流的常用创建方法2. 流的中间操作3. 流的终止操作一、概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行...
    99+
    2024-04-02
  • Java集合Stream流操作的基本使用教程分享
    目录事前准备FilterSortedMapMatchCountReduce总结Java 中可以使用 java.util.Stream 对一个集合(实现了java.util.Colle...
    99+
    2023-02-21
    Java Stream流操作 Java Stream流
  • 【Stream流】java中Stream流详细使用方法
    在Java中,Stream是一种用于处理集合数据的流式操作API。它提供了一种简洁、灵活、高效的方式来对集合进行各种操作,如过滤、映射、排序等。下面是一些Stream的常用功能和详细的代码示例: 创...
    99+
    2023-09-29
    java spring boot 后端 开发语言
  • 49天精通Java,第42天,java stream流详解,从集合遍历,看stream流操作
    目录 专栏导读 一、遍历list 二、Stream流有啥优势? 1、很屌、很帅 2、执行流时,并没有修改流背后的集合 3、简化代码 4、提高效...
    99+
    2023-08-18
    程序人生 学习 java8 Stream java18 低代码 原力计划
  • Java Stream 最全操作用法合集
    Java 8 引入了Stream流的操作,让我们在开发的过程中感受到了很多的便利,小宋我也花时间总结了下关于Stream的堪称最全的使用方法,话不多说,直接放大招。 流(stream)的类型 Java 8提供了两种方式去创建流: 1、str...
    99+
    2023-08-22
    java jvm 开发语言
  • stream流获取集合中一个字段
    例子:         List refOrderProductPos 我现在有这个集合 我想通过stream流 把这个集合中 每一个对象里面的 skuNo 放到一个新的集合里面            可以使用map操作将每个RefOrde...
    99+
    2023-09-13
    算法 java
  • 使用Stream流筛选出List集合中符合条件的实体对象
    使用stream流筛选出List集合中符合条件的实体对象 注意:使用findFirst()方法返回的是符合条件的第一个元素,使用findAny()方法在多线程并发访问下是符合条件的任意元素 示例: p...
    99+
    2023-08-31
    java jvm 开发语言
  • Stream如何在java中使用
    Stream如何在java中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客...
    99+
    2023-06-14
  • stream流的使用-获取list集合中对象的单个字段list集合,进行累加操作
    Stream流的使用 场景及代码案例源于实际项目 1. 需求描述 现存一list集合,其中保存了投资人的信息。 Person (name, age, money rateOfReturn) ...
    99+
    2023-09-08
    java lambda Stream流 stream java8
  • 怎么在Java中使用Stream流求和
    今天就跟大家聊聊有关怎么在Java中使用Stream流求和,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。BigDecimal:BigDecimal bb =lis...
    99+
    2023-06-06
  • 一文详解Java中Stream流的使用
    目录简介操作1:创建流操作2:中间操作筛选(过滤)、去重映射排序消费操作3:终止操作匹配、最值、个数收集规约简介 说明 本文用实例介绍stream的使用。 JDK8新增了Stream...
    99+
    2024-04-02
  • redis集合如何使用
    Redis集合是一个无序的、唯一的、字符串集合,它提供了添加、删除、查询、判断元素是否存在等操作。下面是一些常用的Redis集合操作...
    99+
    2023-08-30
    redis
  • 如何使用TreeSet集合
    这篇文章将为大家详细讲解有关如何使用TreeSet集合,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控...
    99+
    2023-06-02
  • 如何在java集合中使用list方法
    本篇文章给大家分享的是有关如何在java集合中使用list方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。List接口是Collection接口的子接口,List有一个重要的...
    99+
    2023-05-30
    java list
  • 如何在java中使用Stream函数
    这篇文章给大家介绍如何在java中使用Stream函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。1...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作