Stream使用

Stream

Stream入门

定义:也叫Stream流,是Jdk8开始新增的一套APl (java.util.stream.*),可以用于操作集合或者数组的数据。

使用:找出姓张,且是3个字的名字,存入到一个新集合中去。

java 复制代码
// 找出姓张,且是3个字的名字,存入到一个新集合中去。
List<String> list = new ArrayList<>();
for (String name : names) {
    if(name.startsWith("张") && name.length() == 3){
        list.add(name);
    }
}
java 复制代码
// 开始使用Stream流来解决这个需求。
List<String> list2 = names.stream().filter(s -> s.startsWith("张"))
        .filter(a -> a.length()==3).collect(Collectors.toList());

Stream流的中间方法

中间方法指的是调用完成后会返回新的stream流,可以继续使用(支持链式编程)。

  • Stream filter(Predicate<? super T> predicate)
  • Streamsorted() 默认升序
  • Stream sorted(Comparator<? super T> comparator) 自定义比较逻辑
  • Stream limit(long maxSize) 输出前面几条
  • Stream skip(long n) 跳过前面几条,可用保留/获取后面几条
  • Stream distinct() 去重,自定义类型的对象(希望内容一样就认为重复,重写hashCode,equals
  • 映射方法 Stream map(Function<? super I,? extends R> mapper) 对元素进行加工,并返回对应的新流
  • static Stream concat(Stream a, Stream b)合并a和b两个流为一个流

Stream流的终结方法

终结方法指的是调用完成后,不会返回新stream了,没法继续使用流了。

  • 收集stream流:就是把stream流操作后的结果转回到集合或者数组中去返回

    • R collect(Collector collector)把流处理后的结果收集到一个指定的集合中去

      java 复制代码
      // 示例收集Map
      // 需求:请找出身高超过170的学生对象,并把学生对象的名字和身高,存入到一个Map集合返回。
      Map<String, Double> map =
              students.stream().filter(a -> a.getHeight() > 170)
                      .distinct().collect(Collectors.toMap(a -> a.getName(), a -> a.getHeight()));
    • Object\[\] toArray()把流处理后的结果收集到一个数组中去

      java 复制代码
      // 示例,注意:这个 len 是 Stream 框架自动传给你的,它的值就是当前流中元素的总个数。
      Student[] arr = students.stream().filter(a -> a.getHeight() > 170).toArray(len -> new Student[len]);
  • 其他

    • void forEach(Consumer action)对此流运算后的元素执行遍历

    • long count()统计此流运算后的元素个数

    • Optionalmax(Comparator<? super I> comparator)获取此流运算后的最大值元素

    • Optionalmin(Comparator<? super I> comparator)获取此流运算后的最小值元素

注意:Optional 是一个容器类 ,它的核心作用是优雅地处理 null 值 ,避免空指针异常(NullPointerException)。

相关推荐
Wang's Blog2 分钟前
Java 中间件之 RabbitMQ 快速入门: 简单队列模型快速入门
java·中间件·java-rabbitmq
半亩码田6 分钟前
C#转Python第4.7篇:logging:Python 的标准日志库
开发语言·python·c#
程序员老陆6 分钟前
从汇编层面理解 C++ 多线程
开发语言·c++·程序设计
骇客野人10 分钟前
Java 开发组件大全覆盖后端主流技术栈(基础、Web、ORM、中间件、微服务、安全、工具、测试、运维、信创适配常用组件)
java·前端·中间件
谢亮_vipxieliang15 分钟前
深入理解 JavaScript 数据类型与类型转换
开发语言·javascript·ecmascript
IOT-Power23 分钟前
模板方法 + 策略模式
开发语言·c++
EatFan28 分钟前
2026 Rust 后端技术栈选型:Axum 0.8 + Tokio + SQLx 全链路怎么搭
开发语言·后端·rust·tokio·serde·axum·sqlx
外收内放28 分钟前
Python基础语法练习题(59-原始版本与优化版本)
开发语言·python
2401_8888597132 分钟前
STM32H733 MPU、AXI、FMC学习
java·开发语言·stm32·spring
泡海椒39 分钟前
JQuick-Excel 实战:用 STYLE 配置单元格与区域样式
开发语言·python·excel