Java中的Stream流

Java的Stream流是Java 8引入的一种新特性,提供了一种高效和简洁的处理集合(如List、Set等)的方法。Stream流允许我们以函数式编程的方式对数据进行操作,它可以在内存中以一种声明的方式表达数据的处理的管道。

Stream的特点

  1. 不可变性:流本身不存储数据,也没有修改源数据的能力。每次对流的操作都会生成一个新的流。
  2. 惰性求值:流操作是惰性执行的,只有在终止操作时,流的处理才会真正执行。
  3. 链式操作:流的操作可以通过链式调用实现,例如过滤、映射、收集等。

常用的Stream操作

Stream操作通常分为中间操作和终止操作。

1. 中间操作
  • filter:过滤符合条件的元素
  • map:映射每个元素到另一个元素
  • sorted:对元素进行排序
  • distinct:去重
  • limit:限制结果的数量
  • skip:跳过前n个元素
2. 终止操作
  • forEach:迭代流中的每个元素
  • collect:将流转换成集合
  • reduce:对流中的元素进行归约操作
  • count:统计元素个数
  • anyMatch/allMatch/noneMatch:检查流中是否存在符合条件的元素

示例代码

以下是使用Java Stream流的一个简单示例:

import java.util.*;  
import java.util.stream.*;  

public class StreamExample {  
    public static void main(String[] args) {  
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Edward");  

        // 过滤以字母'C'开头的名字,并将名字转换为大写  
        List<String> filteredNames = names.stream()  
            .filter(name -> name.startsWith("C"))  
            .map(String::toUpperCase)  
            .collect(Collectors.toList());  

        System.out.println(filteredNames); // 输出: [CHARLIE]  

        // 计算名字的总长度  
        int totalLength = names.stream()  
            .mapToInt(String::length)  
            .sum();  

        System.out.println("Total length: " + totalLength); // 输出: Total length: 27  

        // 打印所有的名字  
        names.stream().forEach(System.out::println);  
    }  
}

注意事项

  • Stream流只能被消费一次,消费后将无法再次使用。
  • 适合处理大量数据,而不适合小数据集,因为流操作存在开销。

小结

Java Stream API 提供了一种高效、易于理解且功能强大的方式来处理集合,通过流式操作可以让代码更加简洁和清晰,提升开发效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值