Java Stream API 操作完全攻略:让你的代码更加出色 (四)

news2024/10/6 22:26:45

前言

  Java Stream 是一种强大的数据处理工具,可以帮助开发人员快速高效地处理和转换数据流。使用 Stream 操作可以大大简化代码,使其更具可读性和可维护性,从而提高开发效率。本文将为您介绍 Java Stream 操作的所有方面,包括 range、range、iterate、generate 等操作,让你的代码行云流水,更加优雅。

  1. range():生成一个包含指定范围内所有整数的 Stream。
  2. rangeClosed():生成一个包含指定范围内所有整数(包括端点)的 Stream。
  3. iterate():根据指定的初始值和 UnaryOperator 生成一个无限长度的 Stream。
  4. generate():根据指定的 Supplier 生成一个无限长度的 Stream。
  5. takeWhile():返回满足指定条件的元素,直到遇到第一个不满足条件的元素。
  6. dropWhile():返回不满足指定条件的元素,直到遇到第一个满足条件的元素。
  7. peek():对每个元素执行指定的操作,但并不消费元素。
  8. boxed():将 Stream 中的基本类型元素装箱成对应的包装类型。
  9. parallel():返回一个并行的 Stream。
  10. sequential():返回一个顺序的 Stream。

示例

1. 使用 range():生成一个包含指定范围内所有整数的 Stream。

代码示例:

import java.util.stream.IntStream;

public class RangeExample {
    public static void main(String[] args) {
        IntStream.range(1, 6)
                 .forEach(System.out::println);
    }
}

输出结果:

1
2
3
4
5

2. 使用 rangeClosed():生成一个包含指定范围内所有整数(包括端点)的 Stream。

代码示例:

import java.util.stream.IntStream;

public class RangeClosedExample {
    public static void main(String[] args) {
        IntStream.rangeClosed(1, 5)
                 .forEach(System.out::println);
    }
}

输出结果:

1
2
3
4
5

3. 使用 iterate():根据指定的初始值和 UnaryOperator 生成一个无限长度的 Stream。

代码示例:

import java.util.stream.Stream;

public class IterateExample {
    public static void main(String[] args) {
        Stream.iterate(2, n -> n * 2)
              .limit(5)
              .forEach(System.out::println);
    }
}

输出结果:

2
4
8
16
32

4. 使用 generate():根据指定的 Supplier 生成一个无限长度的 Stream。

代码示例:

import java.util.Random;
import java.util.stream.Stream;

public class GenerateExample {
    public static void main(String[] args) {
        Stream.generate(() -> new Random().nextInt(100))
              .limit(5)
              .forEach(System.out::println);
    }
}

输出结果:

64
77
41
21
73

5. 使用 takeWhile():返回满足指定条件的元素,直到遇到第一个不满足条件的元素。

代码示例:

import java.util.stream.Stream;

public class TakeWhileExample {
    public static void main(String[] args) {
        Stream.of("apple", "banana", "orange", "pear")
              .takeWhile(s -> s.startsWith("a"))
              .forEach(System.out::println);
    }
}

输出结果:

apple

6. 使用 dropWhile():返回不满足指定条件的元素,直到遇到第一个满足条件的元素。

代码示例:

import java.util.stream.Stream;

public class DropWhileExample {
    public static void main(String[] args) {
        Stream.of("apple", "banana", "orange", "pear")
              .dropWhile(s -> s.startsWith("a"))
              .forEach(System.out::println);
    }
}

输出结果:

banana
orange
pear

7. 使用 peek():对每个元素执行指定的操作,但并不消费元素。

代码示例:

import java.util.stream.Stream;

public class PeekExample {
    public static void main(String[] args) {
        Stream.of("apple", "banana", "orange", "pear")
              .peek(System.out::println)
              .count();
    }
}

输出结果:

apple
banana
orange
pear

8. 使用 boxed():将 Stream 中的基本类型元素装箱成对应的包装类型。

代码示例:

import java.util.stream.IntStream;

public class BoxedExample {
    public static void main(String[] args) {
        IntStream.range(1, 6)
                 .boxed()
                 .forEach(System.out::println);
    }
}

输出结果:

1
2
3
4
5

9. 使用 parallel():返回一个并行的 Stream。

代码示例:

import java.util.stream.Stream;

public class ParallelExample {
    public static void main(String[] args) {
        Stream.of("apple", "banana", "orange", "pear")
              .parallel()
              .forEach(System.out::println);
    }
}

输出结果:

pear
banana
apple
orange

10. 使用 sequential():返回一个顺序的 Stream。

代码示例:

import java.util.stream.Stream;

public class SequentialExample {
    public static void main(String[] args) {
        Stream.of("apple", "banana", "orange", "pear")
              .parallel()
              .sequential()
              .forEach(System.out::println);
    }
}

输出结果:

apple
banana
orange
pear

结尾

  如果觉得对你有帮助,可以多多评论,多多点赞哦,也可以到我的主页看看,说不定有你喜欢的文章,也可以随手点个关注哦,谢谢。

  我是不一样的科技宅,每天进步一点点,体验不一样的生活。我们下期见!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/412874.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

交友项目【通用设置】三个功能实现

目录 1:交友项目【通用设置】 1.1:查询通用设置 1.1.1:接口地址 1.1.2:流程分析 1.1.3:代码实现 1.2:设置陌生人问题 1.2.1:接口地址 1.2.2:流程分析 1.2.3:代码…

Python 小型项目大全 51~55

五十一、九十九瓶的变体 原文:http://inventwithpython.com/bigbookpython/project51.html 在歌曲“九十九瓶”的这个版本中,该程序通过删除一个字母、交换一个字母的大小写、调换两个字母或重叠一个字母,在每个小节中引入了一些小的不完美。…

4月,我从外包公司离职了

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

python学习

1.安装 Download Python | Python.org 安装时,点击添加路径。 1.1 python的解释器 我们把代码写进.py结尾的文件里,然后 python 路径文件名就可以运行它了。 2.字面量 例如print("我们"),"我们",就是字符串字面量,…

简化你的代码,提高生产力:这10个Lambda表达式必须掌握

前言 Lambda表达式是一种在现代编程语言中越来越常见的特性,可以简化代码、提高生产力。这篇文章将介绍10个必须掌握的Lambda表达式,这些表达式涵盖了在实际编程中经常用到的常见场景,例如列表操作、函数组合、条件筛选等。通过学习这些Lambd…

JUC源码系列-CountDownLatch源码研读

前言 CountDownLatch是一个很有用的工具,latch是门闩的意思,该工具是为了解决某些操作只能在一组操作全部执行完成后才能执行的情景。例如,小组早上开会,只有等所有人到齐了才能开;再如,游乐园里的过山车&…

运行时内存数据区之堆(二)

Minor GC、Major GC、与Full GC JVM在进行GC时,并非每次都对上面三个内存(新生代、老年代:方法区)区域一起回收的,大部分时候回收的都是指新生代。 针对HotSpot VM的实现,它里面的GC按照回收区域又分为两…

浅谈 如果做微服务了 这个模块怎么去划分?

如果做微服务了 这个模块怎么去划分? 还是高内聚 低耦合的一个思想吧 ,单一职责的设计原则,也是一个封装的思想吧, 业务维度: ​ 按照业务的关联程度来决定,关联比较密切的业务适合拆分为一个微服务&…

C++语法(14)---- 模板进阶

C语法(13)---- 模拟实现priority_queue_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130069707?spm1001.2014.3001.5501 目录 1.非类型模板参数 2.模板的特化 1.函数模板(仿函数) 2.类模板 1.全特化 2.半特化、偏…

INFINONE XC164单片机逆向记录(6)C语言学习

本人所写的博客都为开发之中遇到问题记录的随笔,主要是给自己积累些问题。免日后无印象,如有不当之处敬请指正(欢迎进扣群 24849632 探讨问题); 写在专栏前面https://blog.csdn.net/Junping1982/article/details/129955766 INFINONE XC164单片机逆向记录(1)资料准备

FusionCharts Suite XT v3.20.0 Crack

FusionCharts Suite XT v3.20.0 改进了仪表的径向条形图和调整大小功能。2023 年 4 月 11 日 - 9:37新版本特征 添加了一个新方法“_changeXAxisCoordinates”,它允许用户将 x 轴更改为在图例或数据交互时自动居中对齐。更新了 Angular 集成以支持 Angular 版本 14 …

【无功优化】基于多目标差分进化算法的含DG配电网无功优化模型【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

SAM - 分割一切图像【AI大模型】

如果你认为 AI 领域已经通过 ChatGPT、GPT4 和 Stable Diffusion 快速发展,那么请系好安全带,为 AI 的下一个突破性创新做好准备。 推荐:用 NSDT场景设计器 快速搭建3D场景。 Meta 的 FAIR 实验室刚刚发布了 Segment Anything Model (SAM)&am…

电脑软件:推荐一款Windows剪贴板增强软件——ClipX

目录 ClipX能做什么? 软件优点 软件不足之处 今天要介绍的剪切板神器——ClipX,拥有它可以作为弥补Windows 自带的剪贴板的短板的增强型工具软件。 ClipX能做什么? 1. 扩充剪贴板数量,数量可以自己设置 ClipX支持4到1024个剪…

Flutter(三)--可滚动布局

之前介绍了布局和容器,它们都用于摆放一个或多个子组件,而实际应用中,受限于手机、Pad、电脑的屏幕大小,一个布局不可能摆放无限个组件,我们往往采取滚动的方式,来使得一部分组件展示在屏幕上,一…

L2-041 插松枝PTA

人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上,做成大大小小的松枝。他们的工作流程(并不)是这样的: 每人手边有一只小盒子,初始状态为空。每人面前有用不完的松枝干和一个推送器,每次推送一…

piwigo安装及初步使用

一 摘要 本文主要介绍piwigo 安装及初步使用,nginx \php\mysql 等使用 docker 安装 二 环境信息 2.1 操作系统 CentOS Linux release 7.9.2009 (Core)2.2 piwigo piwigo-13.6.0.zip三 安装 3.1安装资源下载 piwigo 请到官网下载https://piwigo.org 安装步骤也…

【STL九】关联容器——map容器、multimap容器

【STL九】关联容器——map容器、multimap容器一、map简介二、头文件三、模板类四、map的内部结构五、成员函数1、迭代器2、元素访问3、容量4、修改操作~~5、操作~~5、查找6、查看操作六、demo1、查找find2、查找lower_bound、upper_bound3、insert、emplace() 和 emplace_hint(…

超详细!Apache+Tomcat+mod_jk搭建负载均衡集群

目录 0.流程图: 1.集群环境: 2.Apache服务器安装httpd: 3.tomcat1服务器和tomcat2服务器安装jdk和Tomcat 4.tomcat1服务器和tomcat2服务器创建页面: 5.Apache服务器的mod_jk模块的安装: 6.查看是否mod_jk.so模块…

DMDSC问题测试

问题一:手动停止两节点,单独启动节点二测试 集群停库前状态,登录监视器查看 dmcssm INI_PATHdmcssm.ini show 节点一: [dmdbalocalhost ~]$ DmServiceDMSERVER stop Stopping DmServiceDMSERVER: …