学习Java 8 Stream,提升编码能力!

Java 11中提供了一组强大的Stream API,使得我们可以更加方便地对集合进行过滤、排序、映射等操作。本文将介绍Java 11 Stream API的使用,包括创建Stream、中间操作、终止操作等内容。

创建Stream

在Java 11中,可以通过多种方式创建Stream对象,包括从集合、数组、文件等数据源创建Stream。

从集合创建Stream

可以使用Collection接口的stream()方法或parallelStream()方法从集合创建Stream。

以下是一个使用stream()方法从集合创建Stream的示例:

复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Stream<Integer> stream = list.stream();

在上面的示例中,我们创建了一个名为list的List对象,并使用stream()方法从该List对象创建了一个Stream<Integer>对象。

从数组创建Stream

可以使用Arrays类的stream()方法从数组创建Stream。

以下是一个使用stream()方法从数组创建Stream的示例:

复制代码
int[] array = new int[] {1, 2, 3, 4, 5};

IntStream stream = Arrays.stream(array);

在上面的示例中,我们创建了一个名为array的int\[\]数组,并使用Arrays类的stream()方法从该数组创建了一个IntStream对象。

从文件创建Stream

可以使用Files类的lines()方法从文件创建Stream。

以下是一个使用lines()方法从文件创建Stream的示例:

复制代码
try {
    Stream<String> stream = Files.lines(Paths.get("filename.txt"));
} catch (IOException e) {
    // handle exception
}

在上面的示例中,我们使用Files类的lines()方法从文件中读取每一行,并创建了一个Stream<String>对象。

中间操作

在Java 11中,Stream API提供了多种中间操作,包括过滤、映射、排序等操作,这些操作不会立即执行,而是在终止操作时才会执行。

过滤操作

可以使用filter()方法对Stream中的元素进行过滤操作。

以下是一个使用filter()方法进行过滤操作的示例:

复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Stream<Integer> stream = list.stream().filter(i -> i % 2 == 0);

在上面的示例中,我们使用filter()方法对Stream中的元素进行过滤操作,只保留其中的偶数。

映射操作

可以使用map()方法对Stream中的元素进行映射操作。

以下是一个使用map()方法进行映射操作的示例:

复制代码
List<String> list = Arrays.asList("apple", "banana", "orange");

Stream<Integer> stream = list.stream().map(s -> s.length());

在上面的示例中,我们使用map()方法对Stream中的字符串元素进行映射操作,将其转换为对应的长度。

排序操作

可以使用sorted()方法对Stream中的元素进行排序操作。

以下是一个使用sorted()方法进行排序操作的示例:

复制代码
List<String> list = Arrays.asList("apple", "banana", "orange");

Stream<String> stream = list.stream().sorted();

在上面的示例中,我们使用sorted()方法对Stream中的字符串元素进行排序操作,按照字典序进行排序。

去重操作

可以使用distinct()方法对Stream中的元素进行去重操作。

以下是一个使用distinct()方法进行去重操作的示例:

复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 2, 4, 5);

Stream<Integer> stream = list.stream().distinct();

在上面的示例中,我们使用distinct()方法对Stream中的整数元素进行去重操作。

截断操作

可以使用limit()方法对Stream中的元素进行截断操作。

以下是一个使用limit()方法进行截断操作的示例:

复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Stream<Integer> stream = list.stream().limit(3);

在上面的示例中,我们使用limit()方法对Stream中的元素进行截断操作,只保留前三个元素。

跳过操作

可以使用skip()方法对Stream中的元素进行跳过操作。

以下是一个使用skip()方法进行跳过操作的示例:

复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Stream<Integer> stream = list.stream().skip(2);

在上面的示例中,我们使用skip()方法对Stream中的元素进行跳过操作,跳过前两个元素。

并行操作

可以使用parallel()方法将Stream转换为并行Stream,从而进行并行操作。

以下是一个使用parallel()方法进行并行操作的示例:

复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

Stream<Integer> stream = list.parallelStream().filter(i -> i % 2 == 0);

在上面的示例中,我们使用parallelStream()方法将Stream转换为并行Stream,并使用filter()方法进行过滤操作。

终止操作

在Java 11中,Stream API提供了多种终止操作,包括计数、收集、归约等操作,这些操作会触发中间操作的执行,从而得到最终的结果。

计数操作

可以使用count()方法对Stream中的元素进行计数操作。

以下是一个使用count()方法进行计数操作的示例:

复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

long count = list.stream().count();

在上面的示例中,我们使用count()方法对Stream中的元素进行计数操作,得到Stream中元素的个数。

收集操作

可以使用collect()方法对Stream中的元素进行收集操作,将其转换为List、Set、Map等集合类型。

以下是一个使用collect()方法进行收集操作的示例:

复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

List<Integer> result = list.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());

在上面的示例中,我们使用filter()方法对Stream中的元素进行过滤操作,然后使用collect()方法将其转换为List类型。

归约操作

可以使用reduce()方法对Stream中的元素进行归约操作,得到一个最终的结果。

以下是一个使用reduce()方法进行归约操作的示例:

复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);

int sum = list.stream().reduce(0, (a, b) -> a + b);

在上面的示例中,我们使用reduce()方法对Stream中的元素进行归约操作,将其求和得到最终的结果。

JAVA语言的开发工具

JNPF快速开发平台是一款基于SpringBoot+Vue3的全栈开发平台,采用微服务、前后端分离架构,具备java/.net双引擎,基于可视化流程建模、表单建模、报表建模工具,快速构建业务应用,平台即可本地化部署,也支持K8S部署。

应用体验地址:https://www.jnpfsoft.com/?csdn,操作一下试试吧!

引擎式软件快速开发模式,除了上述功能,还配置了图表引擎、接口引擎、门户引擎、组织用户引擎等可视化功能引擎,基本实现页面UI的可视化搭建。内置有百种功能控件及使用模板,使得在拖拉拽的简单操作下,也能大限度满足用户个性化需求。

总结

Java 11中的Stream API提供了一组强大的操作,可以方便地对集合进行处理。本文介绍了Java 11 Stream API的创建、中间操作和终止操作等内容,并提供了示例代码。希望本文能够帮助读者更好地理解Java 11 Stream API的使用。

相关推荐
狼爷11 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
念何架构之路11 小时前
zap扩展生态与总结
java·前端·数据库
~kiss~11 小时前
LangChain 基础学习
学习·langchain
一木 之林12 小时前
提示词工程学习总结:用 Few-shot 把大模型调教成金融文本分类、抽取与匹配的自动化流水线
人工智能·学习·计算机视觉·金融·分类
第七页独白12 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库
传奇开心果编程12 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
工作10年+,存储芯片行业12 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
QCoding12 小时前
Spring AI Alibaba Graph实战:从ReAct Agent到Workflow,企业AI复杂流程该如何编排?
java·人工智能
用户0942485680312 小时前
第25章:Java虚拟线程(Project Loom)实战与调度协作
java·jvm
砚底藏山河12 小时前
量化实战:截面因子有效性检验(IC 分析与分层回测)
java·python·金融·maven