我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java集合Stream流如何使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java集合Stream流如何使用

这篇文章主要介绍“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流如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java集合Stream流如何使用

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

下载Word文档

猜你喜欢

Java集合Stream流如何使用

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

如何高效使用 Java 集合 Stream API?(Java集合Stream API的使用 )

在Java编程中,集合是一种常用的数据结构,用于存储和操作一组对象。而Java8引入的StreamAPI为集合操作提供了一种更简洁、高效的方式。本文将详细介绍Java集合StreamAPI的使用方法,帮助你更好地利用这一强大的工具。一、
如何高效使用 Java 集合 Stream API?(Java集合Stream API的使用  )
Java2024-12-14

如何使用 Java Stream 的 flatMap 方法来合并嵌套集合?(Java Stream的flatMap如何合并嵌套集合)

在Java编程中,JavaStream是一个非常强大的工具,它提供了一种函数式编程的方式来处理集合数据。其中,flatMap方法是StreamAPI中的一个重要方法,它用于将一个流中的每个元素转换为一个流,
如何使用 Java Stream 的 flatMap 方法来合并嵌套集合?(Java Stream的flatMap如何合并嵌套集合)
Java2024-12-20

何时使用Java Stream,何时使用Java集合框架

Java 8 的Stream API 提供了不少可替代Java 集合框架的操作。但是不少同学在学习和使用Stream时依然感到很困惑,不知道何时使用Stream,甚至想不起来使用Stream,甚至在Stream和集合框架的选择上也成了问题。

Java的Stream流如何使用

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

Java集合Stream流操作的基本使用教程分享

流操作并不会影响原来的集合,可以简单认为,流操作是把集合中的一个元素逐个复制放到一个首尾相接的流动的水槽中。这篇文章整理了Stream流操作的基本使用,需要的可以参考一下
2023-02-21

Java Stream 如何高效遍历集合?(超详细教程)(java stream如何高效遍历集合)

在Java编程中,集合是一种常用的数据结构,用于存储和操作一组元素。而JavaStream是Java8引入的一个新特性,它提供了一种函数式编程的方式来处理集合数据。本文将详细介绍如何使用JavaStream高效遍历集合,并提供一些实用的代码示例。
Java Stream 如何高效遍历集合?(超详细教程)(java stream如何高效遍历集合)
Java2024-12-14

如何使用Java 8的Stream API进行集合遍历和过滤?(Java 8中如何使用Stream API进行集合的遍历和过滤操作?)

Java8StreamAPI提供了一种简洁高效的方式来遍历和过滤集合。它支持遍历集合无需显式处理索引,并提供多种过滤方法。StreamAPI的优点包括代码简洁性、可读性、效率和并行处理。示例代码展示了如何使用StreamAPI过滤VIP客户并计算总购买金额。StreamAPI的其他方法包括map()、limit()、sorted()和reduce()。
如何使用Java 8的Stream API进行集合遍历和过滤?(Java 8中如何使用Stream API进行集合的遍历和过滤操作?)
2024-04-02

49天精通Java,第42天,java stream流详解,从集合遍历,看stream流操作

目录 专栏导读 一、遍历list 二、Stream流有啥优势? 1、很屌、很帅 2、执行流时,并没有修改流背后的集合 3、简化代码 4、提高效
2023-08-18

如何使用 Java 集合类?(java集合类怎么使用)

在Java编程中,集合类是非常重要的一部分,它们提供了一种方便的方式来存储和操作一组对象。本文将详细介绍Java集合类的使用方法,帮助你更好地理解和应用这些类。一、Java集合类概述Java集合类是Java提供的
如何使用 Java 集合类?(java集合类怎么使用)
Java2024-12-18

Java Stream 最全操作用法合集

Java 8 引入了Stream流的操作,让我们在开发的过程中感受到了很多的便利,小宋我也花时间总结了下关于Stream的堪称最全的使用方法,话不多说,直接放大招。 流(stream)的类型 Java 8提供了两种方式去创建流: 1、str
2023-08-22

Stream如何在java中使用

Stream如何在java中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客
2023-06-14

如何使用 Java Stream 中的 distinct()方法?(Java Stream中的distinct()方法如何使用)

在Java编程中,Stream是一种处理集合的强大工具,它提供了一种声明式的方式来对集合进行各种操作,其中distinct()方法是Stream中的一个重要方法,用于去除集合中的重复元素。本文将详细介绍JavaStream中的distinct()方法的使用方法。
如何使用 Java Stream 中的 distinct()方法?(Java Stream中的distinct()方法如何使用)
Java2024-12-19

在 Java 中如何使用 stream groupBy 方法?(java中stream groupby怎么使用)

在Java编程中,stream是Java8引入的一个重要特性,它提供了一种更简洁、更函数式的编程方式。其中,groupBy方法是stream操作中的一个重要方法,用于根据指定的键函数将流中的元素分组。本文将
在 Java 中如何使用 stream groupBy 方法?(java中stream groupby怎么使用)
Java2024-12-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录