Java8新特性-流式操作

这篇具有很好参考价值的文章主要介绍了Java8新特性-流式操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

目录

什么是集合的流式操作?

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

映射

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

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

toMap:转换成需要的map集合

并行流

什么是并行流?

为什么需要并行流?

parallel():并行流

findAny和findFirst的区别是什么?

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

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


什么是集合的流式操作?

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

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

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

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

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

获取数据源:集合、数组

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

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

Java8新特性-流式操作


映射

方法

  • 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工具类文章来源地址https://www.toymoban.com/news/detail-433873.html

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

到了这里,关于Java8新特性-流式操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java8常用新特性

    目录 简介 1.默认方法 2..Lambda表达式 3.Stream API 4.方法引用 5.Optional类 Java 8是Java编程语言的一个重要版本,引入了许多令人兴奋和强大的新特性。这些特性使得Java程序更加现代化、灵活和高效。让我们一起来探索一些Java 8的常用新特性吧! 首先,Java 8引入了函数式编程的概念

    2024年01月22日
    浏览(38)
  • Java8新特性—方法引用

    前言 Java 8引入了方法引用(method reference)作为一种语言特性,它可以简化代码,使得代码更加易读和易于维护。方法引用可以被视为Lambda表达式的简写形式,可以用来替代Lambda表达式中只调用一个已有方法的情况。总的来说该特性使得Java代码更加简洁和灵活。 使用场景 J

    2024年02月03日
    浏览(38)
  • Java8新特性整理记录

    方法一:  方法二:   例子:

    2024年02月11日
    浏览(43)
  • JDK8新特性(一)集合之 Stream 流式操作

           首先我们应该知道:Stream流的出现,主要是用在集合的操作上。在我们日常的工作中,经常需要对集合中的元素进行相关操作。诸如:增加、删除、获取元素、遍历。         最典型的就是集合遍历了。接下来我们先举个例子来看看 JDK8 Stream流式操作出现之前,

    2024年01月23日
    浏览(36)
  • Java8新特性lambda学习

    Lambda是一个 匿名函数 ,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。 本质: 作为 函数式接口 的实例, 没有接口就没意义了. 这两

    2024年02月05日
    浏览(45)
  • Java8的新特性以及使用

    1.   通 过 1 0 个示 例 来 初 步认 识 J a v a 8 中 的 l a m bd a 表达 式   我个 人 对 J a v a   8 发 布 非 常 激动 , 尤 其 是 l a m b d a 表 达式 和 流 AP I 。 越 来 越 多 的 了解 它 们 , 我 能 写 出 更 干 净 的代 码 。 虽然 一 开 始 并 不 是 这 样 。 第一 次 看 到 用 la m b d a 表

    2024年02月07日
    浏览(50)
  • 【Java8新特性--->异步处理】CompletableFuture

    一、引入 假设一个商品详情页需要以下操作: 查询展示商品的基本信息耗时:0.5s 查询展示商品的销售信息耗时:0.7s 查询展示商品的图片信息耗时:1s 查询展示商品销售属性耗时:0.3s 查询展示商品规格属性耗时:1.5s 查询展示商品详情信息耗时:1s 即使每个查询时间耗时不

    2024年02月06日
    浏览(43)
  • Java新特性:Stream流式编程

    Java新特性:Stream流式编程 Stream 流是 Java8 提供的新功能,是对集合对象功能的增强,能对集合对象进行各种非常便利、高效的聚合操作,或大批量数据操作。Stream 流以一种声明性方式处理数据集合,它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理

    2024年02月15日
    浏览(44)
  • Java8新特性-Lambda表达式

    Lambda表达式 Lambda是一个匿名函数, 可以把lambda表达式理解为是一段可以传递的代码,(将代码像数据一样传递) 变化 需求: 求 薪资高于5000的员工信息 Lambda基本语法 在 java8 中引入了一个新的操作符 \\\"-\\\" , 箭头操作符, 箭头操作符 将Lambda表达式拆分为两部分: 左侧: Lambda表达式的参

    2024年02月01日
    浏览(42)
  • Java8新特性:Optional类(超详解)

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! 到目前为止,臭名昭著的 空指针异常 是导致Java应用程序失败的最常见原因。以前,为了解决空指

    2023年04月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包