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

JAVA8 Stream API 使用详解

Java 8 引入了 Stream API,它提供了对集合对象进行一系列操作的新方式,包括筛选、转换、聚合等。Stream API 的设计目标是提供一种高效且易于使用的处理集合数据的方式,同时支持并行处理。
以下是 Java 8 Stream API 的一些核心概念和使用详解:
1. 创建 Stream
可以通过多种方式创建 Stream:
•  从集合或数组创建:使用 Collection.stream() 或 Arrays.stream()。
•  从值创建:使用 Stream.of()。
•  使用 Stream 的静态方法:如 Stream.empty() 创建一个空的 Stream,Stream.iterate() 和 Stream.generate() 创建无限 Stream。
2. 中间操作(Intermediate Operations)
这些操作会返回一个新的 Stream,可以进行链式操作:
•  filter:根据条件过滤元素。
•  map:将流中的每个元素映射到另一个元素。
•  flatMap:将流中的每个元素替换为目标元素的流,然后将多个流连接到一个流。
•  limit:限制流中元素的数量。
•  sorted:将流中的元素进行排序。
3. 终止操作(Terminal Operations)
终止操作会消耗流,并产生一个最终的结果或副作用:
•  forEach:对流中的每个元素执行操作。
•  collect:将流转换成其他形式(如集合)。
•  reduce:通过某个连接动作将所有元素汇总成一个汇总结果。
•  allMatch、anyMatch、noneMatch:检查流中的元素是否与给定的谓词匹配。
•  count:返回流中元素的数量。
•  findFirst、findAny:返回流中的第一个或任意一个元素。
4. 并行流(Parallel Streams)
通过将 Stream 转换为并行流,可以利用多核处理器的计算能力:
•  通过 parallelStream() 方法将一个 Stream 转换为并行流。
5. 例子
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamExample {
    public static void main(String[] args) {
        List<String> words = Arrays.asList("apple", "banana", "", "cherry", "strawberry", "", "melon");

        // 去除空字符串,然后对结果排序
        List<String> nonEmptyWords = words.stream()
                .filter(word -> !word.isEmpty())
                .sorted()
                .collect(Collectors.toList());

        System.out.println(nonEmptyWords);

        // 计算空字符串的数量
        long emptyCount = words.stream()
                .filter(String::isEmpty)
                .count();

        System.out.println(emptyCount);

        // 使用并行流进行排序
        List<String> parallelSortedWords = words.parallelStream()
                .sorted()
                .collect(Collectors.toList());

        System.out.println(parallelSortedWords);
    }
}

6. 注意事项
•  Stream 不是集合,它是一个惰性序列,这意味着元素直到需要时才会被处理。
•  Stream 只能被消费一次,一旦执行了终止操作,流就会被关闭,无法再次使用。
•  并行流可以提高性能,但也可能增加复杂性,因为并行处理可能会导致线程安全问题和性能问题。
Stream API 提供了一种声明式的处理集合的方式,使得代码更加简洁和易于理解。它也支持函数式编程,允许开发者以更声明式的方式处理数据集合。

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

相关文章:

  • Redis 集群架构:高可用与扩展性
  • Redis数据对象
  • Docker部署GitLab服务器
  • python版本的Selenium的下载及chrome环境搭建和简单使用
  • 重温设计模式--4、组合模式
  • 5、mysql的读写分离
  • uniapp Native.js原生arr插件服务发送广播到uniapp页面中
  • 如何在 Ubuntu 22.04 上安装 Elasticsearch
  • 单片机长耗时前后台任务优化
  • Linux大数据方向shell
  • 爬虫 APP 逆向 ---> shopee(虾皮) 电商
  • axios 常见的content-type、responseType有哪些?
  • 从零开始C++游戏开发之第七篇:游戏状态机与回合管理
  • 【全开源】Java多语言tiktok跨境商城TikTok内嵌商城送搭建教程
  • mac启ssh服务用于快速文件传输
  • 《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
  • 使用 Python 创建多栏 Word 文档 – 详解
  • WebPack3项目升级webpack5的配置调试记录
  • Mysql的MHA高可用及故障切换
  • 【ES6复习笔记】箭头函数(5)
  • 单片机学习笔记——入门51单片机
  • Docker Run使用方法及参数详细说明
  • 面试场景题系列:设计限流器
  • 【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块
  • 网狐旗舰版源码搭建概览
  • vue3中使用vuedraggable实现拖拽
  • leetcode 7. 整数反转
  • Nginx单向链表 ngx_list_t
  • go语言中的字符串详解
  • Windows脚本清理C盘缓存