iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java8中Stream的常用方法有哪些
  • 519
分享到

Java8中Stream的常用方法有哪些

2023-06-16 16:06:46 519人浏览 八月长安
摘要

本文小编为大家详细介绍“Java8中Stream的常用方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java8中Stream的常用方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 简

本文小编为大家详细介绍“Java8中Stream的常用方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java8中Stream的常用方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

 简介

java8也出来好久了,接口默认方法,lambda表达式,函数式接口,Date  api等特性还是有必要去了解一下。比如在项目中经常用到集合,遍历集合可以试下lambda表达式,经常还要对集合进行过滤和排序,Stream就派上用场了。用习惯了,不得不说真的很好用。

Stream作为java8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、便利的聚合操作或者大批量的数据操作,提高了编程效率和代码可读性。

Stream的原理:将要处理的元素看做一种流,流在管道中传输,并且可以在管道的节点上处理,包括过滤筛选、去重、排序、聚合等。元素流在管道中经过中间操作的处理,最后由最终操作得到前面处理的结果。

集合有两种方式生成流:

  • stream() − 为集合创建串行流

  • parallelStream() - 为集合创建并行流

Java8中Stream的常用方法有哪些

上图中是Stream类的类结构图,里面包含了大部分的中间和终止操作。

中间操作主要有以下方法(此类型方法返回的都是Stream):map (mapToInt, flatMap 等)、 filter、 distinct、  sorted、 peek、 limit、 skip、 parallel、 sequential、 unordered

终止操作主要有以下方法:forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、  count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator

举例说明

首先为了说明Stream对对象集合的操作,新建一个Student类(学生类),覆写了equals()和hashCode()方法

public class Student {      private Long id;      private String name;      private int age;      private String address;      public Student() {}      public Student(Long id, String name, int age, String address) {         this.id = id;         this.name = name;         this.age = age;         this.address = address;     }      @Override     public String toString() {         return "Student{" +                 "id=" + id +                 ", name='" + name + '\'' +                 ", age=" + age +                 ", address='" + address + '\'' +                 '}';     }      @Override     public boolean equals(Object o) {         if (this == o) return true;         if (o == null || getClass() != o.getClass()) return false;         Student student = (Student) o;         return age == student.age &&                 Objects.equals(id, student.id) &&                 Objects.equals(name, student.name) &&                 Objects.equals(address, student.address);     }      @Override     public int hashCode() {         return Objects.hash(id, name, age, address);     }      public Long getId() {         return id;     }      public void setId(Long id) {         this.id = id;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public int getAge() {         return age;     }      public void setAge(int age) {         this.age = age;     }      public String getAddress() {         return address;     }      public void setAddress(String address) {         this.address = address;     }  }

filter(筛选)

public static void main(String [] args) {          Student s1 = new Student(1L, "肖战", 15, "浙江");         Student s2 = new Student(2L, "王一博", 15, "湖北");         Student s3 = new Student(3L, "杨紫", 17, "北京");         Student s4 = new Student(4L, "李现", 17, "浙江");         List<Student> students = new ArrayList<>();         students.add(s1);         students.add(s2);         students.add(s3);         students.add(s4);          List<Student> streamStudents = testFilter(students);         streamStudents.forEach(System.out::println);     }          private static List<Student> testFilter(List<Student> students) {         //筛选年龄大于15岁的学生 //        return students.stream().filter(s -> s.getAge()>15).collect(Collectors.toList());         //筛选住在浙江省的学生         return students.stream().filter(s ->"浙江".equals(s.getAddress())).collect(Collectors.toList());     }

运行结果:

这里我们创建了四个学生,经过filter的筛选,筛选出地址是浙江的学生集合。

map(转换)

public static void main(String [] args) {         Student s1 = new Student(1L, "肖战", 15, "浙江");        Student s2 = new Student(2L, "王一博", 15, "湖北");        Student s3 = new Student(3L, "杨紫", 17, "北京");        Student s4 = new Student(4L, "李现", 17, "浙江");        List<Student> students = new ArrayList<>();        students.add(s1);        students.add(s2);        students.add(s3);        students.add(s4);         testMap(students);    }         private static void testMap(List<Student> students) {        //在地址前面加上部分信息,只获取地址输出        List<String> addresses = students.stream().map(s ->"住址:"+s.getAddress()).collect(Collectors.toList());        addresses.forEach(a ->System.out.println(a));    }

运行结果

Java8中Stream的常用方法有哪些

map就是将对应的元素按照给定的方法进行转换。

distinct(去重)

public static void main(String [] args) {       testDistinct1();    }         private static void testDistinct1() {        //简单字符串的去重        List<String> list = Arrays.asList("111","222","333","111","222");        list.stream().distinct().forEach(System.out::println);    }

运行结果:

Java8中Stream的常用方法有哪些

public static void main(String [] args) {        testDistinct2();     }           private static void testDistinct2() {         //引用对象的去重,引用对象要实现hashCode和equal方法,否则去重无效         Student s1 = new Student(1L, "肖战", 15, "浙江");         Student s2 = new Student(2L, "王一博", 15, "湖北");         Student s3 = new Student(3L, "杨紫", 17, "北京");         Student s4 = new Student(4L, "李现", 17, "浙江");         Student s5 = new Student(1L, "肖战", 15, "浙江");         List<Student> students = new ArrayList<>();         students.add(s1);         students.add(s2);         students.add(s3);         students.add(s4);         students.add(s5);         students.stream().distinct().forEach(System.out::println);     }

运行结果:

Java8中Stream的常用方法有哪些

可以看出,两个重复的“肖战”同学进行了去重,这不仅因为使用了distinct()方法,而且因为Student对象重写了equals和hashCode()方法,否则去重是无效的。

sorted(排序)

public static void main(String [] args) {        testSort1();   }       private static void testSort1() {       List<String> list = Arrays.asList("333","222","111");       list.stream().sorted().forEach(System.out::println);   }

运行结果:

Java8中Stream的常用方法有哪些

public static void main(String [] args) {      testSort2(); }   private static void testSort2() {     Student s1 = new Student(1L, "肖战", 15, "浙江");     Student s2 = new Student(2L, "王一博", 15, "湖北");     Student s3 = new Student(3L, "杨紫", 17, "北京");     Student s4 = new Student(4L, "李现", 17, "浙江");     List<Student> students = new ArrayList<>();     students.add(s1);     students.add(s2);     students.add(s3);     students.add(s4);     students.stream()             .sorted((stu1,stu2) ->Long.compare(stu2.getId(), stu1.getId()))             .sorted((stu1,stu2) -> Integer.compare(stu2.getAge(),stu1.getAge()))             .forEach(System.out::println); }

运行结果:

Java8中Stream的常用方法有哪些

上面指定排序规则,先按照学生的id进行降序排序,再按照年龄进行降序排序

limit(限制返回个数)

public static void main(String [] args) {         testLimit();    }         private static void testLimit() {        List<String> list = Arrays.asList("333","222","111");        list.stream().limit(2).forEach(System.out::println);    }

运行结果:

Java8中Stream的常用方法有哪些

skip(删除元素)

public static void main(String [] args) {         testSkip();    }         private static void testSkip() {        List<String> list = Arrays.asList("333","222","111");        list.stream().skip(2).forEach(System.out::println);    }

运行结果:

Java8中Stream的常用方法有哪些

reduce(聚合)

public static void main(String [] args) {         testReduce();     }          private static void testReduce() {         List<String> list = Arrays.asList("欢","迎","你");         String appendStr = list.stream().reduce("北京",(a,b) -> a+b);         System.out.println(appendStr);     }

运行结果:

Java8中Stream的常用方法有哪些

min(求最小值)

public static void main(String [] args) {       testMin();   }       private static void testMin() {       Student s1 = new Student(1L, "肖战", 14, "浙江");       Student s2 = new Student(2L, "王一博", 15, "湖北");       Student s3 = new Student(3L, "杨紫", 17, "北京");       Student s4 = new Student(4L, "李现", 17, "浙江");       List<Student> students = new ArrayList<>();       students.add(s1);       students.add(s2);       students.add(s3);       students.add(s4);       Student minS = students.stream().min((stu1,stu2) ->Integer.compare(stu1.getAge(),stu2.getAge())).get();       System.out.println(minS.toString());   }

运行结果:

Java8中Stream的常用方法有哪些

上面是求所有学生中年龄最小的一个,max同理,求最大值。

anyMatch/allMatch/noneMatch(匹配)

public static void main(String [] args) {        testMatch();    }     private static void testMatch() {        Student s1 = new Student(1L, "肖战", 15, "浙江");        Student s2 = new Student(2L, "王一博", 15, "湖北");        Student s3 = new Student(3L, "杨紫", 17, "北京");        Student s4 = new Student(4L, "李现", 17, "浙江");        List<Student> students = new ArrayList<>();        students.add(s1);        students.add(s2);        students.add(s3);        students.add(s4);        Boolean anyMatch = students.stream().anyMatch(s ->"湖北".equals(s.getAddress()));        if (anyMatch) {            System.out.println("有湖北人");        }        Boolean allMatch = students.stream().allMatch(s -> s.getAge()>=15);        if (allMatch) {            System.out.println("所有学生都满15周岁");        }        Boolean noneMatch = students.stream().noneMatch(s -> "杨洋".equals(s.getName()));        if (noneMatch) {            System.out.println("没有叫杨洋的同学");        }    }

运行结果:

Java8中Stream的常用方法有哪些

anyMatch:Stream 中任意一个元素符合传入的 predicate,返回 true

allMatch:Stream 中全部元素符合传入的 predicate,返回 true

noneMatch:Stream 中没有一个元素符合传入的 predicate,返回 true

读到这里,这篇“Java8中Stream的常用方法有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Java8中Stream的常用方法有哪些

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

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

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

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

下载Word文档
猜你喜欢
  • Java8中Stream的常用方法有哪些
    本文小编为大家详细介绍“Java8中Stream的常用方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java8中Stream的常用方法有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 简...
    99+
    2023-06-16
  • Java8 Stream流的常用方法有哪些
    这篇文章主要介绍“Java8 Stream流的常用方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java8 Stream流的常用方法有哪些”文章能帮助大家解决问题。1、...
    99+
    2023-07-02
  • Java8中Stream的特性有哪些
    这期内容当中小编将会给大家带来有关Java8中Stream的特性有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.初识stream先来一个总纲:东西就是这么多啦,stream是java8中加入的一个...
    99+
    2023-05-31
    java8 stream ava
  • Java8中Stream API的技巧有哪些
    本篇内容介绍了“Java8中Stream API的技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! Stream简介Jav...
    99+
    2023-06-16
  • Java8 Stream 流常用方法合集
    目录一、概述二、分类三、具体用法1. 流的常用创建方法2. 流的中间操作3. 流的终止操作一、概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行...
    99+
    2024-04-02
  • Java8 Stream流的常用方法汇总
    目录1、快速创建List(1)、new一个list,一个一个添加(2)、Stream流:创建动态list,可以添加元素(3)、如果创建一个固定长度的list,可以使用Arrays.a...
    99+
    2024-04-02
  • Java8 Stream流常用方法是什么
    这篇文章主要介绍了Java8 Stream流常用方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java8 Stream流常用方法是什么文章都会有所收获,下面我们一起来看看吧。一、概...
    99+
    2023-06-30
  • java8中有哪些方法引用
    本篇文章给大家分享的是有关java8中有哪些方法引用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用...
    99+
    2023-06-14
  • Java8中Stream的使用方式
    目录前言:1. 为什么有经验的老手更倾向于使用Stream2. Stream 的使用方式3. Stream 的创建4. Stream 中间操作5. Stream 终止操作6. Str...
    99+
    2024-04-02
  • Java8中Stream有什么用
    这篇文章主要为大家展示了“Java8中Stream有什么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java8中Stream有什么用”这篇文章吧。Java8对集合提供了一种流式计算的方式,这...
    99+
    2023-06-25
  • java8中注解的使用方法有哪些
    java8中注解的使用方法有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重复的;2、Queu...
    99+
    2023-06-14
  • JAVA8 Stream流中的reduce()方法怎么使用
    这篇文章主要介绍“JAVA8 Stream流中的reduce()方法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JAVA8 Stream流中的reduce()方法怎么使...
    99+
    2023-07-05
  • Java8中Stream的详细使用方法大全
    目录一、概述1、使用流的好处2、流是什么二、分类三、Stream的创建1、通过 java.util.Collection.stream() 方法用集合创建流2、使用 java.uti...
    99+
    2024-04-02
  • JAVA8 Stream流中的reduce()方法详解
    目录reduce()简介reduce三个override的方法公共集合reduce()简介 Reduce 原意:减少,缩小根据指定的计算模型将Stream中的值计算得到一个...
    99+
    2023-02-28
    JAVA8 Stream reduce()方法 JAVA8 Stream reduce
  • java8中注解的用法有哪些
    这篇文章主要介绍了java8中注解的用法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java8中注解的用法有哪些文章都会有所收获,下面我们一起来看看吧。1、定义包装注释,包括实际注释的数组。@inter...
    99+
    2023-06-30
  • Java8中Stream的一些神操作
    Java8对集合提供了一种流式计算的方式,这种风格将要处理的元素集合看 作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如 筛选, 排序,聚合等。 Stream A...
    99+
    2024-04-02
  • Java8中日期比较方法有哪些
    这篇文章将为大家详细讲解有关Java8中日期比较方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 Java 8日期比较方法在Java 8中,可以使用新的...
    99+
    2024-04-02
  • Java8中Stream的使用方式是什么
    这篇文章主要介绍“Java8中Stream的使用方式是什么”,在日常操作中,相信很多人在Java8中Stream的使用方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java8中Stream的使用方式...
    99+
    2023-06-30
  • java中常用的方法有哪些
    Java中常用的方法有以下几种:1. String类的方法:常用的字符串操作方法,如substring()、indexOf...
    99+
    2023-09-22
    java
  • java8新特性之stream流中reduce()求和知识有哪些
    这篇文章主要介绍了java8新特性之stream流中reduce()求和知识有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.stream().reduce()单字段求...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作