Java
Python前端运维数据库
Java
Java
  • 新特性
    • Record
    • Optional
  • 面向对象
    • 面向对象基础
    • 构造方法
    • 继承与多态
    • 接口
    • 修饰符
    • 代码块
    • 接口(Interface)
    • 枚举类
  • IO流
    • IO
      • 字节流
      • 字符流
      • 缓冲流
      • 转换流
      • 操作ZIP
      • File 对象
    • NIO
      • Channel和Buffer
      • 异步文件通道AsynchronousFileChannel
      • Selector
      • Path/Files/Pipe
  • 反射
  • 内存分配
  • 集合
    • 简介
    • List
    • Set
    • Map
    • EnumMap
  • 日期与时间
    • Date和Calendar
    • Java8 新时间 ✨
      • LocalDateTime
      • ZonedDateTime
      • Duration
    • 时间格式化
      • SimpleDateFromat
      • DateTimeFormatter ✨
    • Instant
    • 实践
  • 网络编程
    • IP 地址
    • 网络模型
    • TCP 编程
    • UDP 编程
    • HTTP 编程
  • 加密和安全
  • 并发编程
    • 多线程
    • 线程与进程的区别
    • 线程组和线程优先级
    • 线程池
    • 线程锁
  • 异步任务
    • Future
    • CompletableFuture
      • 开启异步任务
      • 串行任务方法
      • 并行任务方法
      • 任务结束方法
      • 异常处理方法
      • 查看状态方法
      • 设置任务结果方法
  • 执行系统命令
  • Stream 流
    • Stream 流的创建
    • Stream 流串行与并行
    • Stream 流中间操作
    • Stream 流终端操作
  • Lambda 表达式
    • Lambda 表达式简介
    • Lambda 表达式语法
    • 方法引用
  • String
  • StringBuffer
由 GitBook 提供支持
在本页
  • 有状态操作
  • 无状态

这有帮助吗?

  1. Stream 流

Stream 流中间操作

以下列出了在日常开发中常用的中间操作方法

有状态操作

distinct(去重)

保证元素的唯一性,通过 Object.equals(Object) 方法来判断元素是否相等。

List<String> list = Arrays.asList("a", "b", "c", "a", "b", "c");
list.stream().distinct().forEach(System.out::println);
// 输出:a b c

sorted(排序)

对元素进行排序,默认采用自然排序,流中元素需实现 Comparable 接口。

List<String> list = Arrays.asList("c", "a", "b");
list.stream().sorted().forEach(System.out::println);
// 输出:a b c

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream().sorted((i1, i2) -> i2 - i1).forEach(System.out::println);
// 输出:5 4 3 2 1

多字段排序

List<Student> students = new ArrayList<>();
students.add(new Student("张三", 20));
students.add(new Student("李四", 18));
students.add(new Student("王五", 19));
students.add(new Student("赵六", 18));
// 按年龄升序,年龄相同按姓名升序
students.sort(Comparator.comparing(Student::getAge).thenComparing(Student::getName));
students.forEach(System.out::println);

skip

跳过指定数量的元素,返回一个扔掉了前 n 个元素的流。如果流中元素不足 n 个,则返回一个空流。与 limit(n) 互补。

List<String> list = Arrays.asList("a", "b", "c", "d", "e");
list.stream().skip(2).forEach(System.out::println);

limit

截断流,使其元素不超过给定数量。

List<String> list = Arrays.asList("a", "b", "c", "d", "e");
list.stream().limit(2).forEach(System.out::println);
// a

无状态

filter

过滤元素,保留符合条件的元素。

List<String> list = Arrays.asList("a", "b", "c", "d", "e");
list.stream().filter(s -> s.equals("a")).forEach(System.out::println);

map

对元素进行映射,将元素转换成其他形式或提取信息。接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。

List<String> list = Arrays.asList("a", "b", "c", "d", "e");
list.stream().map(String::toUpperCase).forEach(System.out::println);

flatMap

将多个流合并成一个流。

List<String> list1 = Arrays.asList("a", "b", "c");
List<String> list2 = Arrays.asList("d", "e", "f");
Stream.of(list1, list2).flatMap(Collection::stream).forEach(System.out::println);

peek

对每个元素执行操作并返回一个新的 Stream。

List<String> list = Arrays.asList("a", "b", "c", "d", "e");
list.stream().peek(System.out::println).forEach(System.out::println);
上一页Stream 流串行与并行下一页Stream 流终端操作

最后更新于11个月前

这有帮助吗?