Java应用9(流)

Java Stream API 是 Java 8 引入的核心特性之一,它提供了一种高效且声明式的方式来处理集合数据。Stream 允许你将操作链接起来,形成一个流水线式的处理流程,极大地提高了代码的可读性和效率。

一、流的核心概念

1. 流的构成
  • 数据源:可以是集合、数组、I/O 通道等。
  • 中间操作:返回一个新的流(如 filtermapsorted)。
  • 终端操作:触发计算并产生结果(如 collectforEachreduce)。

2. 流的特性
  • 不存储数据:流是数据的视图,不改变原始数据源。
  • 惰性求值:中间操作不会立即执行,直到遇到终端操作。
  • 一次性使用:流只能被消费一次,消费后需要重新创建。

二、创建流的多种方式

1. 从集合创建
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StreamCreation {
    public static void main(String[] args) {
        // 集合转流
        List<String> list = Arrays.asList("apple", "banana", "cherry");
        Stream<String> stream = list.stream();          // 顺序流
        Stream<String> parallelStream = list.parallelStream(); // 并行流
    }
}

2.从数组创建

int[] numbers = {1, 2, 3, 4, 5};
IntStream intStream = Arrays.stream(numbers); // 基本类型流

3. Stream.of()

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

4.生成无限流

// 迭代生成
Stream<Integer> evenNumbers = Stream.iterate(0, n -> n + 2); // 0, 2, 4, 6...

// 随机数生成
Stream<Double> randoms = Stream.generate(Math::random);

5.从文件创建

try (Stream<String> lines = Files.lines(Paths.get("data.txt"))) {
    lines.forEach(System.out::println);
} catch (IOException e) {
    e.printStackTrace();
}

三、中间操作详解

中间操作返回新的流,支持链式调用,形成操作流水线。

1. 过滤(Filtering)
​
List<String> fruits = Arrays.asList("apple", "banana", "cherry", "date");
List<String> longFruits = fruits.stream()
    .filter(fruit -> fruit.length() > 5) // 过滤长度>5的水果
    .collect(Collectors.toList()); // [banana, cherry]

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值