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

Java中Stream流详解

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

Java中Stream流详解

今天在Java学习中,遇到了starm这个操作方式,了解后发现很多操作都很实用并且在项目开发中经常用到,特写下此篇博客用来记录。

一、Stream基础概念

Stream是Java 8中引入的全新API,可以极大地方便我们对集合、数组等数据源进行连续操作。它可以简化我们的代码,使代码更加易于维护和理解。Stream实际上是一种惰性计算的方式,只有需要输出结果时,才会开始计算。

Stream操作中的惰性计算

Stream只是对于原有数据的操作方式,数据本身并没有改变。因此,在对Stream进行操作时,实际上是将操作指令存储在操作流中并未计算执行,直到需要输出结果时才会被触发。这种方式可以减少计算量和开销,提高效率。

创建Stream

可以从很多种数据源中创建Stream,例如List、Set或者任何其他实现了Iterable接口的类。创建方式很简单,使用stream()parallelStream()方法即可。

List<String> list = Arrays.asList("a", "b", "c");Stream<String> stream = list.stream(); // 串行StreamStream<String> parallelStream = list.parallelStream(); // 并行Stream

二、常用的Stream操作方法

常用的Stream操作包括:过滤、映射、排序、去重、计数、归约等等。

filter

过滤方法filter用于对Stream中的元素进行筛选,只保留符合指定条件的元素。其函数式接口为Predicate,其方法为boolean test(T t),接受一个T类型的对象,并返回一个boolean类型值。当该方法返回true时,说明该元素符合条件,将被保留在Stream中。

例如以下代码:

List<String> list = Arrays.asList("apple", "banana", "orange", "pear");Stream<String> stream = list.stream().filter(s -> s.length() > 5);

其中的lamdba表达式s -> s.length() > 5用于筛选长度大于5的字符串。

map

映射方法map用于将Stream中的元素根据指定规则进行转换。其函数式接口为Function,其方法为R apply(T t),接受一个T类型的对象,并返回一个R类型的对象。实质上,map方法就是对Stream中各元素做一个同类型的映射。

例如以下代码:

List<String> list = Arrays.asList("apple", "banana", "orange", "pear");Stream<Integer> stream = list.stream().map(String::length);

其中的方法引用String::length用于将每个字符串对象转换成其长度值。

sorted

排序方法sorted用于对Stream中的元素进行排序。其函数式接口为Comparator,其方法为int compare(T o1, T o2),接受两个T类型的对象,并返回一个int类型值。当返回值为负数时,说明o1应排在o2前面;当返回值为正数时,说明o1应排在o2后面;当返回值为0时,说明o1与o2的顺序不确定。

例如以下代码:

List<String> list = Arrays.asList("apple", "banana", "orange", "pear");Stream<String> stream = list.stream().sorted();

其中,Stream将使用默认的排序规则对元素进行排序。

distinct

去重方法distinct用于将Stream中的重复元素去除,只保留一个。其使用equals方法进行比较,因此需要保证数据源中的元素正确实现了equals方法。

例如以下代码:

List<String> list = Arrays.asList("apple", "banana", "orange", "banana");Stream<String> stream = list.stream().distinct();

其中,Stream中的元素"banana"出现了两次,但在调用distinct方法后,只保留了一次的"banana"元素。

count

计数方法count用于返回Stream中元素的数量,返回值为long类型。

例如以下代码:

List<String> list = Arrays.asList("apple", "banana", "orange", "pear");long count = list.stream().count();

其中,count方法返回的值为4,即Stream中元素的数量。

reduce

归约方法reduce用于将Stream中的元素归约成一个值。其函数式接口为BinaryOperator,其方法为apply(T t1, T t2),用于对两个T类型值进行归约,返回一个T类型值。reduce方法接受两个参数:第一个参数表示归约操作的初始值,可以为任意类型的对象;第二个参数为一个BinaryOperator类型的对象,用于对Stream中所有元素递归地进行归约操作。

例如以下代码:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);int sum = list.stream().reduce(0, Integer::sum);

forEach

forEach方法用于对Stream中的每个元素执行指定的操作,其函数式接口为Consumer,其方法为void accept(T t)forEach是一个终端操作,对于同一个Stream只能进行一次,一旦执行了终端操作,该Stream就不能再重复使用了。

例如以下代码:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);list.stream().forEach(System.out::println);

其中,先通过stream方法将集合转换为Stream流,接着使用forEach方法对每个整数进行输出,最终输出结果为:

12345

三、总结

Stream是Java 8中非常重要的一个API,可以极大地方便我们对列表、集合等数据源进行连续操作。Stream操作可以极大地简化我们的代码,提高效率,因此在Java编程中应该熟练使用Stream。需要注意的是,在对Stream进行操作时,应该注意Stream的惰性计算特性,以避免不必要的计算开销。

来源地址:https://blog.csdn.net/weixin_52357829/article/details/131177398

免责声明:

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

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

Java中Stream流详解

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

下载Word文档

猜你喜欢

Java中Stream流详解

今天在Java学习中,遇到了starm这个操作方式,了解后发现很多操作都很实用并且在项目开发中经常用到,特写下此篇博客用来记录。 目录 一、Stream基础概念Stream操作中的惰性计算创建Stream 二、常用的Strea
2023-08-25

Java Stream流详解

本文目录 学习目标中间操作Filter(过滤)Map(转换)Sorted(排序)Distinct(去重)Limit(限制)Skip(跳过)Peek(展示) 终止操作forEach(循环)Collect(收集)Count(计数)R
2023-08-16

详解java8中的Stream数据流

Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。直观意味着开发者在写代码时只需关注他们想要的结果是什么而无需关
2023-05-31

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

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

JAVA8 Stream流中的reduce()方法详解

reduce操作可以实现从Stream中生成一个值,其生成的值不是随意的,而是根据指定的计算模型,这篇文章主要介绍了JAVA8 Stream流中的reduce()方法详解,需要的朋友可以参考下
2023-02-28

Java基础之Stream流原理与用法详解

从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式。本文就来为大家详细讲讲Stream流原理与用法
2022-11-13

Java8新特性Stream流详解

陈老老老板 说明:新的专栏,本专栏专门讲Java8新特性,把平时遇到的问题与Java8的写法进行总结,需要注意的地方都标红了,一起加油。 本文是介绍Java8新特性Stream流常用方法超详细教学
2023-08-17

Java中List使用stream流转成map的几种方式详解

Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作,下面这篇文章主要给大家介绍了关于Java中List使用stream流转成map的几种方式,需要的朋友可以参考下
2023-05-16

编程热搜

  • 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动态编译

目录