Java8新特性-流式操作

简介: 更像是一个迭代器,有序的获取到数据源中的每一个数据,并且可以对这些数据进行一些操作

在Java8中提供了新特性—流式操作,通过流式操作可以帮助我们对数据更快速的进行一些过滤、排序、去重、最大、最小等等操作并且内置了并行流将流划分成多个线程进行并行执行,提供更高效、快速的执行能力。接下来我们一起看看Java8为我们新增了哪些便捷呢?


什么是集合的流式操作?


流式操作:不是一个数据结构,不负责任何的数据存储


更像是一个迭代器,有序的获取到数据源中的每一个数据,并且可以对这些数据进行一些操作


流失操作的每一个方法,返回值都是返回的流本身


翻译:可以把流比作一个管道,管道中有很多过滤网


对集合做流式操作的三个步骤?


获取数据源:集合、数组


对数据进行处理的过程:过滤、排序、映射……(中间操作)


对流中数据的整合:转成集合、数量(最终操作)


b5e1535ab24743cda74ce82d4de128a1.png


映射


方法


  • flatMap:相同元素合并或拆分h1
  • map:将源数据转换成需要的数据类型或者进行指定的操作
  • toMap:转换成需要的map集合


实践说明


flatMap:相同元素合并或拆分h1


map:将源数据转换成需要的数据类型或者进行指定的操作


要求输出内容:h,e,l,l,o,w,o,r,l,d


public static void main(String[] args) {
        String[] array = {"hello", "world"};
        System.out.println(Arrays.stream(array).map(ele -> ele.split("")).flatMap(Arrays::stream).collect(Collectors.toList()));
}


参考博客:


flatMap():Java8 FlatMap的使用_java flatmap_杨幂等的博客-CSDN博客


Map():这么简单,还不会使用java8 stream流的map()方法吗?_stream流的map方法_欧子有话说的博客-CSDN博客


toMap:转换成需要的map集合


public static void main(String[] args) {
       Stream<Person> stream = Data.getData().stream();
        Map<String, Integer> maps = stream.collect(Collectors.toMap(Person::getName, Person::getScore));
        System.out.println(maps);
}


并行流


什么是并行流?


把流分成多个块,并行操作


为什么需要并行流?


集合做重复的操作,如果使用串行执行会相当耗时,因此一般会采用多线程来加快, Java8的提供了并发执行能力


方法


  • parallel():并行流


  • findAny:最先抢到cpu时间片的线程它所处理的数据段中的第一个数据,串行流结果等同于findFirst


  • findFirst:流中的第一个元素(指集合中的第一个),并行流或串行流结果一致


实战说明


parallel():并行流


import com.example.Data;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.LongStream;
/**
 * @BelongsProject: StreamOperate
 * @BelongsPackage: PACKAGE_NAME
 * @CreateTime: 2023-05-01  21:12
 * @Description: TODO
 * @Version: 1.0
 */
public class ParalleStream {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        LongStream.rangeClosed(0L, 50000000000L).parallel().reduce(Long::sum);
        long end = System.currentTimeMillis();
        System.out.println(end - start);
    }
}


参考博客:Java 8 并行流(Parallel Stream) 介绍 - 简书


findAny和findFirst的区别是什么?


findAny:最先抢到cpu时间片的线程它所处理的数据段中的第一个数据,串行流结果等同于findFirst


findFirst:流中的第一个元素(指集合中的第一个),并行流或串行流结果一致


对于并行流中,findAny比findFirst效率更高


import com.example.Data;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.LongStream;
/**
 * @BelongsProject: StreamOperate
 * @BelongsPackage: PACKAGE_NAME
 * @CreateTime: 2023-05-01  21:12
 * @Description: TODO
 * @Version: 1.0
 */
public class ParalleStream {
    public static void main(String[] args) {
        System.out.println(Data.getData().parallelStream().findFirst());
        System.out.println(Data.getData().stream().findFirst());
        System.out.println(Data.getData().stream().findAny());
        System.out.println(Data.getData().parallelStream().findAny());
    }
}


相关博客


Java8流式操作——中间操作


Java8流式操作——最终操作


Java流式操作——Collectors工具类


如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞+收藏+评论脚印支持一下博主~

相关文章
|
2月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
78 2
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
48 3
|
2月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
37 2
|
2月前
|
存储 算法 Java
Java Set因其“无重复”特性在集合框架中独树一帜
【10月更文挑战第14天】Java Set因其“无重复”特性在集合框架中独树一帜。本文深入解析Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定的数据结构(哈希表、红黑树)确保元素唯一性,并提供最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的`hashCode()`与`equals()`方法。
36 3
|
2月前
|
安全 Java API
Java 17新特性让你的代码起飞!
【10月更文挑战第4天】自Java 8发布以来,Java语言经历了多次重大更新,每一次都引入了令人兴奋的新特性,极大地提升了开发效率和代码质量。本文将带你从Java 8一路走到Java 17,探索那些能让你的代码起飞的关键特性。
93 1
|
2月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
90 3
|
13天前
|
存储 Java 开发者
什么是java的Compact Strings特性,什么情况下使用
Java 9引入了紧凑字符串特性,优化了字符串的内存使用。它通过将字符串从UTF-16字符数组改为字节数组存储,根据内容选择更节省内存的编码方式,通常能节省10%至15%的内存。
|
22天前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
38 6
|
1月前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
33 4
|
2月前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
97 3