【Java基础——21 Stream 流】

1. 获取流对象(创建流)

你可以从集合、数组或者通过 Stream 类提供的静态方法获取流对象。

  • 从集合创建流

  • List<String> list = Arrays.asList("apple", "banana", "cherry");
    Stream<String> stream = list.stream(); // 获取集合的流对象
    
  • 从数组创建流

  • String[] array = {"apple", "banana", "cherry"};
    Stream<String> stream = Arrays.stream(array); // 获取数组的流对象
    
  • 通过 Stream 类提供的静态方法创建流

  • Stream<String> stream = Stream.of("apple", "banana", "cherry"); // 直接创建流对象
    

2. 中间方法(Intermediate Operations)

中间方法允许你对流进行一系列的转换操作,例如过滤、映射、排序等。这些操作不会立即执行,而是返回一个新的流对象,因此可以链式调用多个中间方法。

  • 过滤(Filter):根据指定的条件过滤流中的元素。

  • 映射(Map):对流中的每个元素应用一个函数,将其映射为另一个元素。

  • 排序(Sorted):对流中的元素进行排序。

  • 限制(Limit):截断流,使其最多只包含指定数量的元素。

  • 跳过(Skip):跳过流中的前几个元素。

  • Stream<String> filteredStream = stream.filter(s -> s.startsWith("a"));
    
    Stream<String> mappedStream = stream.map(String::toUpperCase);
    
    Stream<String> sortedStream = stream.sorted();
    
    Stream<String> limitedStream = stream.limit(3);
    
    Stream<String> skippedStream = stream.skip(2);
    

3. 终结方法(Terminal Operations)

终结方法触发流的处理并生成结果。当调用终结方法时,流将执行中间操作链,并且通常不会返回流对象,而是返回一个非流的结果。

  • forEach:对流中的每个元素执行指定操作。

  • collect:将流元素收集到一个集合中。

  • reduce:将流中的元素逐个结合,得到一个最终结果。

  • count:返回流中元素的数量。

  • anyMatchallMatchnoneMatch:检查流中是否至少有一个、全部或者没有元素匹配给定的条件。

  • stream.forEach(System.out::println);
    
    List<String> collectedList = stream.collect(Collectors.toList());
    
    Optional<String> reduced = stream.reduce((s1, s2) -> s1 + ", " + s2);
    
    Optional<String> reduced = stream.reduce((s1, s2) -> s1 + ", " + s2);
    
    long count = stream.count();
    
    boolean anyMatch = stream.anyMatch(s -> s.startsWith("a"));
    

示例

以下是一个完整的示例,展示了如何使用流的获取、中间方法和终结方法:

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

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

        // 获取流对象
        Stream<String> stream = fruits.stream();

        // 中间方法:过滤、映射、排序
        Stream<String> filteredStream = stream.filter(s -> s.startsWith("a"));
        Stream<String> uppercasedStream = filteredStream.map(String::toUpperCase);
        Stream<String> sortedStream = uppercasedStream.sorted();

        // 终结方法:forEach 输出结果
        sortedStream.forEach(System.out::println); // 输出结果:APPLE
    }
}

在以上示例中,fruits.stream() 获取了一个集合 fruits 的流对象,然后链式调用了中间方法 filtermapsorted,最后使用终结方法 forEach 输出结果。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值