Java基础——Stream类
**Java基础——Stream类**
在 Java 中,Stream 是一种高级 API,它允许您以声明式的方式处理数据集合。Stream 类提供了一种灵活且易用的方法来操作数据集合,使得您的代码更简洁、更易读。
### Stream 的定义和特点Stream 是一个接口,它代表一系列元素的序列。每个元素都可以是原始类型(如 int 或 String)或对象引用。Stream 不存储任何元素,而是延迟执行,直到您真正需要它们时才进行计算。
Stream 有以下几个重要特点:
* **延迟执行**:Stream 只有在您真正需要结果时才会被执行。这意味着 Stream 可以避免不必要的计算,从而提高性能。
* **管道式编程**:Stream 支持管道式编程,这使得您的代码更易读和维护。您可以将多个操作连接起来,形成一个流水线,以便一步步地处理数据。
* **懒加载**:Stream 的元素只在需要它们时才会被加载。这意味着 Stream 可以避免不必要的内存分配,从而提高性能。
### Stream 的创建您可以使用以下方法来创建 Stream:
* **Collections.stream()**:从集合中创建 Stream。
* **Arrays.stream()**:从数组中创建 Stream。
* **Stream.of()**:从指定元素中创建 Stream。
* **Stream.iterate()**:从迭代器中创建 Stream。
### Stream 的操作Stream 支持以下几种操作:
* **filter()**:过滤 Stream 中的元素,仅保留满足条件的元素。
* **map()**:将 Stream 中的元素映射到另一个类型。
* **flatMap()**:将 Stream 中的元素展平为一维数组。
* **distinct()**:去除 Stream 中重复的元素。
* **sorted()**:对 Stream 中的元素进行排序。
* **limit()**:限制 Stream 中的元素数量。
* **skip()**:跳过 Stream 中的一部分元素。
### Stream 的示例以下是使用 Stream 类的几个示例:
#### 示例1:从集合中创建 Stream
javaimport java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Listlist = Arrays.asList("Apple", "Banana", "Cherry"); list.stream().forEach(System.out::println); } }
输出:
AppleBananaCherry
#### 示例2:从数组中创建 Stream
javaimport java.util.Arrays; public class Main { public static void main(String[] args) { String[] array = {"Apple", "Banana", "Cherry"}; Arrays.stream(array).forEach(System.out::println); } }
输出:
AppleBananaCherry
#### 示例3:从指定元素中创建 Stream
javaimport java.util.stream.Stream; public class Main { public static void main(String[] args) { Streamstream = Stream.of("Apple", "Banana", "Cherry"); stream.forEach(System.out::println); } }
输出:
AppleBananaCherry
#### 示例4:从迭代器中创建 Stream
javaimport java.util.Iterator; import java.util.stream.Stream; public class Main { public static void main(String[] args) { Iteratoriterator = new Iterator<>() { private int index =0; @Override public boolean hasNext() { return index < 3; } @Override public String next() { return "Apple" + index++; } }; Stream stream = StreamSupport.stream(iterator, false); stream.forEach(System.out::println); } }
输出:
Apple0Apple1Apple2
#### 示例5:使用 filter() 过滤 Stream 中的元素
javaimport java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Listlist = Arrays.asList("Apple", "Banana", "Cherry"); list.stream().filter(s -> s.startsWith("A")).forEach(System.out::println); } }
输出:
Apple
#### 示例6:使用 map() 将 Stream 中的元素映射到另一个类型
javaimport java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Listlist = Arrays.asList("Apple", "Banana", "Cherry"); list.stream().map(s -> s.toUpperCase()).forEach(System.out::println); } }
输出:
APPLEBANANACHERRY
#### 示例7:使用 flatMap() 将 Stream 中的元素展平为一维数组
javaimport java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Listlist = Arrays.asList("Apple", "Banana", "Cherry"); list.stream().flatMap(s -> Arrays.stream(s.split(""))).forEach(System.out::println); } }
输出:
AppleBananaCherry
#### 示例8:使用 distinct() 去除 Stream 中重复的元素
javaimport java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Listlist = Arrays.asList("Apple", "Banana", "Cherry", "Apple"); list.stream().distinct().forEach(System.out::println); } }
输出:
AppleBananaCherry
#### 示例9:使用 sorted() 对 Stream 中的元素进行排序
javaimport java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Listlist = Arrays.asList("Apple", "Banana", "Cherry"); list.stream().sorted().forEach(System.out::println); } }
输出:
AppleBananaCherry
#### 示例10:使用 limit()限制 Stream 中的元素数量
javaimport java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Listlist = Arrays.asList("Apple", "Banana", "Cherry"); list.stream().limit(2).forEach(System.out::println); } }
输出:
AppleBanana
#### 示例11:使用 skip() 跳过 Stream 中的一部分元素
javaimport java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Listlist = Arrays.asList("Apple", "Banana", "Cherry"); list.stream().skip(1).forEach(System.out::println); } }
输出:
BananaCherry
### 总结Stream 类提供了一种灵活且易用的方法来操作数据集合,使得您的代码更简洁、更易读。您可以使用 Stream 来过滤、映射、展平、去重、排序和限制数据集合中的元素。通过使用 Stream,您可以提高性能并使您的代码更加高效。
### 参考* [Java8 Stream API]( />* [Stream API Tutorial](