Java Stream

系统学习链接https://blog.youkuaiyun.com/qq_36551991/article/details/108172160

Java的Stream API是Java 8引入的一项强大功能,用于处理集合数据。它允许以声明式编程的方式操作集合,大大简化了代码,提高了代码的可读性和可维护性。以下是对Java Stream的详细讲解:

什么是Stream?

Stream是数据的序列,支持多种操作来进行计算。它类似于集合,但不同之处在于,Stream的操作可以是惰性(lazy)的,这意味着它们会在需要时才进行计算,而不是立即计算。

Stream的特点

  1. 无存储:Stream不存储数据,而是按需计算。
  2. 函数式编程:Stream API利用函数式编程的思想,如lambda表达式,可以简洁地进行集合操作。
  3. 惰性执行:Stream操作是惰性的,只有在终端操作(terminal operation)执行时,才会进行计算。
  4. 可并行化:Stream API可以轻松地进行并行处理,提高性能。

创建Stream

有多种方式可以创建Stream:

  1. 通过集合创建

    List<String> list = Arrays.asList("a", "b", "c");
    Stream<String> stream = list.stream();
    
  2. 通过数组创建

    String[] array = {"a", "b", "c"};
    Stream<String> stream = Arrays.stream(array);
    
  3. 通过Stream的静态方法创建

    Stream<String> stream = Stream.of("a", "b", "c");
    

Stream的操作

Stream的操作分为两类:中间操作(intermediate operation)和终端操作(terminal operation)。

中间操作

中间操作会返回一个新的Stream,可以进行链式调用。常见的中间操作有:

  • filter:过滤元素

    Stream<String> filtered = stream.filter(s -> s.startsWith("a"));
    
  • map:映射每个元素到另一个元素

    Stream<Integer> mapped = stream.map(String::length);
    
  • sorted:排序

    Stream<String> sorted = stream.sorted();
    
  • limit:限制Stream的长度

    Stream<String> limited = stream.limit(2);
    
  • distinct:去重

    Stream<String> distinct = stream.distinct();
    
终端操作

终端操作会触发Stream的计算,返回一个非Stream的结果,如集合或数值。常见的终端操作有:

  • forEach:遍历每个元素

    stream.forEach(System.out::println);
    
  • collect:收集Stream的元素到集合

    List<String> list = stream.collect(Collectors.toList());
    
  • reduce:通过给定的运算汇总元素

    Optional<String> reduced = stream.reduce((s1, s2) -> s1 + s2);
    
  • count:计算元素个数

    long count = stream.count();
    
  • anyMatch, allMatch, noneMatch:匹配操作

    boolean anyMatch = stream.anyMatch(s -> s.startsWith("a"));
    boolean allMatch = stream.allMatch(s -> s.startsWith("a"));
    boolean noneMatch = stream.noneMatch(s -> s.startsWith("a"));
    

并行Stream

通过调用parallelStream方法,可以创建一个并行的Stream,以充分利用多核处理器的优势。

List<String> list = Arrays.asList("a", "b", "c");
Stream<String> parallelStream = list.parallelStream();

示例代码

以下是一个简单的示例,展示了如何使用Stream API来处理集合数据:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("apple", "banana", "cherry", "date", "elderberry", "fig", "grape");

        // 使用Stream API进行操作
        List<String> result = list.stream()
                                  .filter(s -> s.length() > 5)
                                  .map(String::toUpperCase)
                                  .sorted()
                                  .collect(Collectors.toList());

        // 输出结果
        result.forEach(System.out::println);
    }
}

输出结果

BANANA
CHERRY
ELDERBERRY

个人理解

Stream就是提供一些操作,让我们对集合的操作更加方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值