Java中Stream流

Java中Stream流

Stream

使用flatMap处理嵌套集合 :

有一个对象列表,每个对象又包含一个列表,可以使用flatMap来"展平"这个结构。

java 复制代码
List<List<String>> listOfLists = Arrays.asList(
    Arrays.asList("a", "b"),
    Arrays.asList("c", "d")
);
List<String> flatList = listOfLists.stream()
    .flatMap(List::stream)
    .collect(Collectors.toList());

使用peek进行调试 :
peek方法可以在流的中间操作中插入一个动作,比如打印日志,而不会影响流的最终结果。

java 复制代码
List<String> result = list.stream()
    .filter(s -> s.startsWith("a"))
    .peek(System.out::println) // 打印中间结果
    .map(String::toUpperCase)
    .collect(Collectors.toList());

peek可以用来调试也可以塞对象,不改变流,如果你这个里面有对象,比如xxx.setXXX() 那么也会修改这个对象

使用groupingBy进行分组 :
Collectors.groupingBy可以根据某个属性对元素进行分组。

java 复制代码
Map<Integer, List<String>> map = list.stream()
    .collect(Collectors.groupingBy(String::length));

使用reduce进行复杂聚合 :
reduce方法可以用来执行更复杂的聚合操作,比如连接字符串。

java 复制代码
String joined = list.stream()
    .reduce("", (a, b) -> a + ", " + b);

使用IntStreamLongStreamDoubleStream进行基本类型操作

对于基本数据类型(int、long、double),可以使用IntStreamLongStreamDoubleStream来提高性能和内存使用效率。

java 复制代码
int sum = IntStream.of(1, 2, 3, 4, 5).sum();

使用Stream.generateStream.iterate生成无限流

Stream.generate可以用来创建一个无限流,其中每个元素都是通过一个Supplier函数生成的。

java 复制代码
Stream<Double> randoms = Stream.generate(Math::random);

Stream.iterate可以用来创建一个无限流,其中每个元素都是基于前一个元素计算得到的。

java 复制代码
Stream<Integer> naturals = Stream.iterate(0, n -> n + 1);

使用Stream.collect的自定义收集器

collect方法非常灵活,可以配合自定义的Collector来实现复杂的收集逻辑。

java 复制代码
Collector<T, ?, LinkedList<T>> toLinkedList = Collector.of(
    LinkedList::new,
    LinkedList::add,
    (left, right) -> { left.addAll(right); return left; }
);
List<T> linkedListOfT = stream.collect(toLinkedList);

使用Stream.concat合并两个流

Stream.concat方法可以用来合并两个流。

java 复制代码
Stream<String> stream1 = Stream.of("a", "b", "c");
Stream<String> stream2 = Stream.of("d", "e", "f");
Stream<String> combined = Stream.concat(stream1, stream2);

使用Stream.peek进行调试

peek方法可以在流的处理过程中插入一个操作,用于调试。

java 复制代码
List<String> result = list.stream()
    .filter(s -> s.startsWith("a"))
    .peek(System.out::println) // 打印中间结果
    .map(String::toUpperCase)
    .collect(Collectors.toList());

使用Stream.anyMatch, Stream.allMatch, 和 Stream.noneMatch

这三个方法用于对流中的元素进行断言检查。

java 复制代码
boolean anyStartsWithA = list.stream().anyMatch(s -> s.startsWith("a"));
boolean allStartsWithA = list.stream().allMatch(s -> s.startsWith("a"));
boolean noneStartsWithZ = list.stream().noneMatch(s -> s.startsWith("z"));

使用Stream.ofNullable处理可能为null的元素

Stream.ofNullable可以用来创建一个元素可能为null的流。

java 复制代码
Stream<String> stream = Stream.ofNullable(getNullableValue());

使用flatMap处理多层嵌套结构

当处理多层嵌套的集合时,flatMap可以用来将多层结构"展平"成单个流。

java 复制代码
Stream<List<List<String>>> nestedLists = Stream.of(listOfLists);
Stream<String> flatStream = nestedLists.flatMap(List::stream).flatMap(List::stream);

Optional

  1. 使用orElseGet延迟加载 :
    orElseGet提供一个Supplier函数,只有在Optional为空时才调用。

    java 复制代码
    Optional<String> optional = Optional.ofNullable(getValue());
    String value = optional.orElseGet(() -> computeValue());
  2. 使用maporElse链式处理 :
    map可以用来转换Optional中的值,如果Optional为空,则可以使用orElse提供默认值。

    java 复制代码
    String result = optional.map(String::toUpperCase)
        .orElse("DEFAULT");
  3. 使用filter进行条件过滤 :
    filter方法可以用来检查Optional中的值是否满足特定条件。

    java 复制代码
    Optional<String> filtered = optional.filter(s -> s.length() > 5);
  4. 使用ifPresent执行操作 :

    如果Optional中有值,ifPresent执行一个操作。

    java 复制代码
    optional.ifPresent(System.out::println);
  5. 使用stream方法 :
    Optional类有一个stream方法,可以将Optional转换为Stream,这样就可以使用Stream API进行进一步处理。

    java 复制代码
    optional.stream()
        .map(String::toUpperCase)
        .forEach(System.out::println);
相关推荐
刘立军20 小时前
使用pyHugeGraph查询HugeGraph图数据
python·graphql
浮游本尊20 小时前
Java学习第22天 - 云原生与容器化
java
渣哥1 天前
原来 Java 里线程安全集合有这么多种
java
间彧1 天前
Spring Boot集成Spring Security完整指南
java
间彧1 天前
Spring Secutiy基本原理及工作流程
java
数据智能老司机1 天前
精通 Python 设计模式——创建型设计模式
python·设计模式·架构
Java水解1 天前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
数据智能老司机1 天前
精通 Python 设计模式——SOLID 原则
python·设计模式·架构
c8i1 天前
django中的FBV 和 CBV
python·django
c8i1 天前
python中的闭包和装饰器
python