当前位置: 首页 > news >正文

Java新特性Stream流详解

一、概述

Stream流是Java 8
API添加的一个新的抽象,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式)。

Stream流是对集合(Collection)对象功能的增强,与Lambda表达式结合,可以提高编程效率、间接性和程序可读性。

二、如何使用Stream流?
1.创建Stream流。
(1)Stream创建。

Stream<String> stream1 = Stream.of("one","two");

(2) Collection集合创建。

List<String> list = Arrays.asList("one","two");
Stream<String> stream = list.stream(); // 串行Stream
Stream<String> parallelStream = list.parallelStream(); // 并行Stream

(3)Array数组创建

String[] strArr = {"one","two"};Stream arrayStream = Arrays.stream(strArr);

(4) 文件创建

try {Stream<String> fileStream = Files.lines(Paths.get("file.txt"), Charset.defaultCharset());} catch (IOException e) {e.printStackTrace();}

(5) 函数创建
generator:


Stream<String> stream = Stream.generate(()->"a").limit(2);

generate方法接受一个参数,方法参数类型为Supplier ,由它为流提供值。generate生成的流也是无限流,因此通过limit对流进行了截断。

iterator:

Stream<Integer> iterateStream = Stream.iterate(0, s -> s + 2).limit(3);

iterate方法接受两个参数,第一个为初始化值,第二个为进行的函数操作,因为iterator生成的流为无限流,通过limit方法对流进行了截断,只生成3个偶数。

2.操作Stream。
常用的Stream操作包括:过滤、映射、排序、去重、计数、归约等等。
filter:
过滤方法filter用于对Stream中的元素进行筛选,只保留符合指定条件的元素,如下:

List<String> list = Arrays.asList("one","two","three");
Stream<String> stream = list.stream().filter(s -> s.length() > 3);

map:使用map方法可以将流中的元素映射到另一个值。例如,将一个字符串列表中的元素转换为大写:

List<String> names = Arrays.asList("one","two","three");
List<String> upperCaseNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());

sorted:使用sorted方法可以对流中的元素进行排序。例如,对一个整数列表进行升序排序:

List<Integer> numbers = Arrays.asList(1, 3, 5, 1, 7);
List<Integer> sortedNumbers = numbers.stream().sorted().collect(Collectors.toList());

distinct: distinct用于将Stream中的重复元素去除,只保留一个:

List<Integer> numbers = Arrays.asList(2, 7, 1, 1, 7);
List<Integer> sortedNumbers = numbers.stream().distinct().collect(Collectors.toList());

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

List<String> list = Arrays.asList("one","two","three");
long count = list.stream().count();

reduce: reduce用于将Stream中的元素归约成一个值,例如求和、求最大值等。例如,计算一个整数列表的总和:

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

forEach: forEach方法用于对Stream中的每个元素执行指定的操作。

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

collect:使用collect方法可以将流中的元素收集到一个集合中。例如,将一个字符串列表中的元素收集到一个新的列表中:

List<String> names = Arrays.asList("one","two","three");
List<String> collectedNames = names.stream().collect(Collectors.toList());

总结:
Stream是Java 8中非常重要的一个API,本文详细介绍了Java Stream流的概念、使用方法。通过Stream流,开发人员可以以声明式的方式对数据进行操作,使代码更加简洁、易读。我们还介绍了Stream流的常用操作方法使用
通过充分利用Stream流的特性和优势,开发人员可以编写更加优雅、高效的数据处理代码。

http://www.lryc.cn/news/194675.html

相关文章:

  • 关于VScode中一些常用的快捷操作!
  • Django 使用Mysql数据库
  • js继承的几种方式(原型链继承、构造函数继承、组合式继承、寄生组合式继承、ES6的Class类继承)
  • AnyTransition/过渡动画, MatchedGeometryEffect/匹配几何动画效果 的使用
  • mac版postman升级后数据恢复办法
  • 四.镜头知识之放大倍率
  • Jenkins UI 自动化持续化集成测试
  • vue项目中引入地图的详细教程
  • MyBatisPlus 多数据源配置
  • 使用Golang实现HTTP代理突破IP访问限制
  • Iterator和ListIterator的区别是什么?
  • 大坑-MATLAB图片转存时需注意的点
  • 基于Lang-Chain(ChatGLM和ChatChat)知识库大语言模型的部署搭建
  • 个人轻博客PHP开源系统/溯雪Sxlog轻博客源码/洁干净轻/占内存极低/php源码
  • 2.Vue-从零开始搭建一个vue项目
  • 快速构建代理应对
  • 【LeetCode刷题(数据结构)】:另一颗树的子树
  • LeetCode 2903. 找出满足差值条件的下标 I【双指针+维护最大最小】简单
  • 【神经网络】如何在Pytorch中从零开始将MNIST网络量化为8位
  • 智慧水利:山海鲸数字孪生的革新之路
  • 【unity】【VR】白马VR课堂系列-VR开发核心基础04-主体设置-XR Rig的引入和设置
  • Arcgis实现Tiff合并
  • 将已有jar包放进maven仓库
  • 从0开始学go第八天
  • centos7为例进行数据盘挂载详解
  • 网络安全——自学(黑客技术)
  • Npm——yalc本地库调试工具
  • 【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
  • docker部署的jenkins配置(接口自动化)
  • qemu 运行 linux