广告
返回顶部
首页 > 资讯 > 精选 >Java8新特性Stream流怎么使用
  • 747
分享到

Java8新特性Stream流怎么使用

2023-07-02 11:07:50 747人浏览 薄情痞子
摘要

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

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

Java8新特性Stream流怎么使用

Stream流的概念

为什么要使用Stream流?

Java8新特性Stream流怎么使用

Stream流的思想类似于一个生产车间的流水线。当需要对多个元素进行操作(特别是多步操作)的时候,考虑到性能及便利性,我们应该首先拼好一个“模型”步驱方案,然后再按照方案去执行它。

Java8新特性Stream流怎么使用

Stream(流)是一个来自数据源的元素队列

元素是 特定类型的对象,形成一个队列。lava中的Stream并不会存储元素,而是按需计算。

数据源 流的来源。可以是集合数组等。

Stream的两个基础的特征:

·Pipelining:中间操作都会饭回流对象本身。这样多个操作可以事联成一个管道,如同流式风格(fluentstyle)。这样做可以对操作进行优化,比如延迟执行(laziness)和短路(short-circuiting)。

内部迭代:以前对集合遍历都是通过iterator或者增强for的方式显式的在集合外部进行迭代,这叫做外部迭代。Stream提供了内部迭代的方式,流可以直接调用遍历方法。

当使用一个流的时候,通常包括三个基本步骤:获取一个数据源(source)→数据转换一执行操作获取想要的结果,每次转换原有Stream对象不改变,返回一个新的Stream对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道。

Stream流的获取

获取流的常用方式有2种:

通过Collection集合获取

Stream接口的静态方法of获取

通过Collection集合获取

所有的Collection集合都可以通过stream默认方法获取流

//把集合转换为stream流//list集合List<String>list=new ArrayList<>();Stream<String>stream=list.stream();//set集合Set<String>set=new HashSet<>();Stream<String>stream2=set.stream();//map集合(map集合需要间接的转换)Map<String, String>map=new HashMap<>();//方法一:获取键,存储到一个set集合中Set<String>keySet=map.keySet();Stream<String>stream3=keySet.stream();//方法二:获取值,存储到一个collection集合中Collection<String>values=map.values();Stream<String>stream4=values.stream();//方法三:获取键值对,,键与值的映射关系,entrySet()Set<Map.Entry<String, String>>entries=map.entrySet();Stream<Map.Entry<String, String>>stream5=entries.stream();

2.Stream接口的静态方法of获取

Stream接口的静态方法of可以获取数组对应的流。

参数是一个可变参数,那么我们就可以传递一个数组

//把数组转换成Stream流Stream<Integer>stream6=Stream.of(1,2,3,4,5);//可变参数可以传递数组Integer[]arr={1,2,3,4,5};Stream<Integer>stream7=Stream.of(arr);String[]arr2={"a","bb","ccc"};Stream<String>stream8=Stream.of(arr2);

stream流的常用方法

stream的常用方法分为两类:

延迟方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方法均为延迟方法。)

终结方法:返回值类型不再是Stream接口自身类型的方法,因此不再支持类似StringBuilder那样的链式调用。

Java8新特性Stream流怎么使用

以上是一些stream流的常用方法,下面我们就依次学习一下这些方法的使用。

forEach遍历方法

该方法接受一个Consumer接口函数,会将每一个流元素交给函数进行处理。Consumer接口是一个消费性的函数式接口,可以传递lambda表达式,消费数据。

foeeach方法,用来遍历流中的数据,是一个终结方法,遍历之后就不能使用流中的其他方法。

基本使用

public class Demo03Stream_forEach {public static void main(String[] args) {Stream<String>stream=Stream.of("张三","李四","王五","赵六","小明","小胖");stream.forEach(name->System.out.println(name));}}

filter过滤方法

用于对Stream流中的数进行过滤。filter方法的参数Predicatehi一个函数式接口,所以可以传递lambda表达式,对数据进行过滤。可以通过filter方法将一个转换过滤为下一个流,如下图:

Java8新特性Stream流怎么使用

上面这个图把一些不也一样的元素,用filter方法进行过滤,然后成为新的流。

基本使用

public class Demo04Stream_filter {public static void main(String[] args) {//创建一个Stream流Stream<String>stream=Stream .of("张三丰","赵敏","张无忌","周芷若","张三","狮王","张大牛");//对Stream流中的元素进行过滤。只要张的人Stream<String>stream2=stream.filter((String name)->{return name.startsWith("张");});//遍历Stream流stream2.forEach(name->System.out.println(name));}}

map映射方法(转换)

如果需要将流中的元素转换到另一个流中,可以使用map方法。该接口需要一个Funtion函数式接口参数,可以将当前流中的T类型数据类型转换为另一种R类型的数据流,如下图:

Java8新特性Stream流怎么使用

上面的图将不同元素的数据转换成用一种类型的元素。

基本使用

public class Demo05Stream_map {public static void main(String[] args) {//获取一个String类型的Stream流Stream<String>stream=Stream.of("1","2","3","4","5");//使用map方法,把字符串类型的整数,转换(映射)为integer类型的整数Stream<Integer>stream2=stream.map((String s)->{return Integer.parseInt(s);});//遍历Stream流stream2.forEach(i->System.out.println(i));}}

count统计元素个数方法

用于统计Stream流中的元素个数,count方法是一个终结方法,返回值是一个Long类型的整数。所以不能再继续调用Stream流中的其他方法了

基本使用

public class Demo06Stream_count {public static void main(String[] args) {//获取一个Stream流ArrayList<Integer>list=new ArrayList<Integer>();//添加元素list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);Stream<Integer>stream=list.stream();//统计stream流中的元素个数long count=stream.count();//打印输出System.out.println(count);//7}}

limit截取流元素方法

Limit方法可以对流进行截取,只取用前n个。参数是一个long型,如果集合当前长度大于参数则进行截取,否则不进行操作。limit方法是一个延迟方法,只是对流中的元素进行截取,返回一个新的流,使用可以继续调用stream流中的其他方法。

Java8新特性Stream流怎么使用

基本使用

public class Demo07Stream_limit {public static void main(String[] args) {show02();}private static void show02() {//创建一个String类型的数组String[]arr={"喜羊羊","美羊羊","沸羊羊","懒羊羊","灰太狼","红太狼"};//集合获取一个Stream流Stream<String>stream=Stream.of(arr);//用limit方法截取前6个元素Stream<String>stream2=stream.limit(3);//遍历Stream2流stream2.forEach(i->System.out.println(i));}}

skip跳过元素方法

如果希望跳过前几个元素,可以使用skip方法获取一个截取之后的新流,如果流的当前长度大于n,则跳过前n个;否则将会得到一个长度为0的流。

Java8新特性Stream流怎么使用

基本使用

public class Demo08Stream_skip {public static void main(String[] args) {//创建一个String类型的数组String[]arr={"喜羊羊","美羊羊","懒羊羊","慢羊羊","红太狼","灰太狼","小灰灰","沸羊羊","软绵绵","武大狼"};//获取Stream流Stream<String>stream=Stream.of(arr);//使用skip方法截取后面的元素Stream<String>stream2=stream.skip(5);//遍历stream2流stream2.forEach(i->System.out.println(i));}}

concat:合并方法

用于把流组合到一块。如果有两个流,希望合并成为一个流,就可以使用concat方法

Java8新特性Stream流怎么使用

基本使用

public class Demo09Stream_concat {public static void main(String[] args) {//创建一个Stream流Stream<String>stream=Stream.of("张三丰","张翠山","赵敏","周芷若","张无忌");//创建一个String类型的数组String[]arr={"喜羊羊","美羊羊","懒羊羊","慢羊羊","红太狼","灰太狼","小灰灰","沸羊羊","软绵绵","武大狼"};//获取Stream流Stream<String>stream2=Stream.of(arr);//使用常用方法concat方法合并流Stream<String>stream3=Stream.concat(stream, stream2);//遍历Stream3流stream3.forEach(i->System.out.println(i));}}

Stream流的练习

最后,我们通过下面的练习来巩固一下上面所学的内容。

现在有两个ArrayList集合存储队伍当中的多个成员姓名,

要求使用传统的for循环(或增强for循环)依次进行以下若干操作步骤:

第一个队伍只要名字为3个字的成员姓名:存储到一个新集合中。

第一个队伍筛选之后只要前3个人;存储到一个新集合中。

第二个队伍只要姓张的成员姓名;存储到一个新集合中。

第二个队伍筛选之后不要前2个人;存储到一个新集合中。

将两个队伍合并为一个队伍;存储到一个新集台中。

根据姓名创建Person对象:存储到一个新集合中,

打印整个队伍的Person对象信息。

示例:

第一支队伍:迪丽热巴、宋远桥、苏星河、石破天、石中玉、老子、庄子、洪七公

第二支队伍:古娜力扎、张无忌、赵丽颖、张三丰、尼古拉斯赵四、张天爱、张二狗

首先创建Person对象类

public class Person {private String name;public Person() {super();}public Person(String name) {super();this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Person [name=" + name + "]";}}

然后再根据习题要求用Stream流进行过滤

第一个队伍只要名字为3个字的成员姓名:存储到一个新集合中。

第一个队伍筛选之后只要前3个人;存储到一个新集合中。

// 第一支队伍// 创建集合ArrayList<String> one = new ArrayList<>();// 添加元素one.add("迪丽热巴");one.add("宋远桥");one.add("苏星河");one.add("石破天");one.add("石中玉");one.add("老子");one.add("庄子");one.add("洪七公");//1.第一个队伍只要名字为3个字的成员姓名:存储到一个新集合中。//2.第一个队伍筛选之后只要前3个人;存储到一个新集合中。Stream<String>oneStream=one.stream().filter(name->name.length()==3).limit(3);

第二个队伍只要姓张的成员姓名;存储到一个新集合中。

第二个队伍筛选之后不要前2个人;存储到一个新集合中。

// 第二支队伍// 创建集合ArrayList<String> tow = new ArrayList<>();// 添加元素tow.add("古娜力扎");tow.add("张无忌");tow.add("赵丽颖");tow.add("张三丰");tow.add("尼古拉斯赵四");tow.add("张天爱");tow.add("张二狗");//3.第二个队伍只要姓张的成员姓名;存储到一个新集合中。//4.第二个队伍筛选之后不要前2个人;存储到一个新集合中。Stream<String>towStream=tow.stream().filter(name->name.startsWith("张")).skip(2);

将两个队伍合并为一个队伍;存储到一个新集台中。

根据姓名创建Person对象:存储到一个新集合中,

打印整个队伍的Person对象信息。

//5.将两个队伍合并为一个队伍;存储到一个新集台中。//6.根据姓名创建Person对象:存储到一个新集合中,//7.打印整个队伍的Person对象信息。Stream.concat(oneStream,towStream).map(name->new Person(name)).forEach(p->System.out.println(p));

Java8新特性Stream流怎么使用

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

--结束END--

本文标题: Java8新特性Stream流怎么使用

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

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

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

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

下载Word文档
猜你喜欢
  • Java8新特性Stream流怎么使用
    本文小编为大家详细介绍“Java8新特性Stream流怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java8新特性Stream流怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Stream流的概...
    99+
    2023-07-02
  • Java8新特性Stream流详解
    陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油。 本文是介绍Java8新特性Stream流常用方法超详细教学 ...
    99+
    2023-08-17
    java 算法 数据结构
  • java8新特性Stream怎么创建
    这篇文章主要介绍了java8新特性Stream怎么创建的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java8新特性Stream怎么创建文章都会有所收获,下面我们一起来看看吧。java8除了提供了Lambda表...
    99+
    2023-07-05
  • Java8新特性Stream流的示例分析
    这篇文章主要介绍Java8新特性Stream流的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是Stream流?Stream流是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。Stream的优点...
    99+
    2023-05-30
    java8 stream流
  • 带你走进Java8新特性Stream流的小世界
    目录 一. 什么是流(Stream) 1.1 流的定义 1.2 流的特点 1.3 操作流 1.4 创建流 二. 流的中间操作 2.1 流的筛选与切片 2.1.1 filter 2.1.2 limit 2.1.3 skip 2.1.4 dis...
    99+
    2023-09-01
    java 开发语言
  • Java8新特性怎么使用
    本篇内容介绍了“Java8新特性怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java语言新特性Lambda表达式Lambda表达式...
    99+
    2023-06-02
  • java8新特性之stream流中reduce()求和知识总结
    1.stream().reduce()单字段求和 (1)普通数字求和 public static void test2(){ List<Integer&g...
    99+
    2022-11-12
  • java8新特性之stream流中reduce()求和知识有哪些
    这篇文章主要介绍了java8新特性之stream流中reduce()求和知识有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.stream().reduce()单字段求...
    99+
    2023-06-15
  • Java8 Stream流式编程怎么使用
    这篇文章主要介绍了Java8 Stream流式编程怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java8 Stream流式编程怎么使用文章都会有所收获,下面我们一起来看看吧。一、S...
    99+
    2023-07-05
  • Java8并发新特性CompletableFuture怎么使用
    这篇文章主要介绍“Java8并发新特性CompletableFuture怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java8并发新特性CompletableFuture怎么使用”文章能帮...
    99+
    2023-06-30
  • 怎么使用Java8中接口的新特性
    这篇文章主要介绍“怎么使用Java8中接口的新特性”,在日常操作中,相信很多人在怎么使用Java8中接口的新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java8中接口的新特性”的疑惑有所帮助!...
    99+
    2023-06-25
  • Java8新特性Optional类怎么应用
    这篇“Java8新特性Optional类怎么应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java8新特性Optiona...
    99+
    2023-06-29
  • JAVA8 Stream流中的reduce()方法怎么使用
    这篇文章主要介绍“JAVA8 Stream流中的reduce()方法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JAVA8 Stream流中的reduce()方法怎么使...
    99+
    2023-07-05
  • Java8特性之用Stream流代替For循环操作详解
    目录准备一个实体类准备一个List集合传统的for循环使用Stream流先声明筛选条件,在遍历Stream操作 嵌套循环(2层)准备一个实体类 public class Stud...
    99+
    2022-11-12
  • 熟练掌握Java8新特性之Stream API的全面应用
    1.写在前面 关于Stream API的内容,已经基本上说完了。大家可以参考我的这两篇文章: 深入理解Java8新特性之Stream API的创建方式和中间操作步骤、深入理解Java...
    99+
    2022-11-12
  • Java8中Stream怎么使用
    今天小编给大家分享一下Java8中Stream怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、概述Java 8 是...
    99+
    2023-07-02
  • JAVA8新特性stream流收集为Map,value为null导致空指针的问题
    jdk8 新特性stream深受喜爱,平时使用比较多,其中有: Map collect2 =  list.stream().collect(Collectors.toMap(Book::getName, Book::getIdNO,(p...
    99+
    2023-09-24
    java 开发语言
  • Java8中接口的新特性使用指南
    目录前言编写测试类ComepareTest第一种情况,一个类实现了接口的同时又继承了一个父类情况二情况三总结前言 在Java8中接口中不再只有抽象方法,还可以有静态方法以及默认方法,...
    99+
    2022-11-12
  • Java8新特性之Lambda表达式的使用
    目录1. lambda表达式介绍2. lambda表达式的重要特征3. lambda表达式对域外变量的限制4. lambda表达式的优缺点5. lambda表达式的使用场景1. la...
    99+
    2022-11-12
  • 使用java8 新特性stream流对List<Map<String, Object>>集合进行遍历、过滤、查询、去重、排序、分组
    对于一个List类型的数据,可以使用Java 8的新特性stream流来进行遍历、过滤、查询、去重、排序、分组等操作。 遍历: List dataList = new ArrayList();//添加数据Map map1 = new Has...
    99+
    2023-09-08
    list java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作