java stream 高级用法 简书
Java Stream 高级用法
Java Stream 是 Java 8 版本新引入的一个功能强大的 API,它提供了一种新的操作集合的方式,能够简化代码和提高性能。在本文中,我们将探索 Java Stream 的高级用法,包括流的创建、中间操作和终端操作等。
一、流的创建
Java Stream 可以从多种数据源创建,比如集合、数组、文件等。下面是一些创建流的示例。
1.1 从集合创建流
从集合创建流是最常见的方式。我们可以使用 `stream()` 方法将集合转换为流。示例代码如下:
```java
List<String> list = Arrays.asList("apple", "banana", "orange");
Stream<String> stream = list.stream();
```
1.2 从数组创建流
从数组创建流与从集合创建流类似,我们可以使用 `Arrays.stream()` 方法将数组转换为流。示例代码如下:
```java
int[] array = {1, 2, 3, 4, 5};
IntStream stream = Arrays.stream(array);
```
1.3 从文件创建流
从文件创建流需要使用到 `Files` 类的静态方法 `lines()`,该方法可以将文件中的每一行转换
为流。示例代码如下:
```java
try (Stream<String> stream = Files.(""))) {
// 处理文件流
} catch (IOException e) {
e.printStackTrace();
}
```
二、中间操作
中间操作是对流进行转换和过滤的操作,它们并不会立即执行,只有当遇到终端操作时才会触发执行。下面是一些常见的中间操作。
2.1 映射操作
映射操作可以将流中的每个元素映射到其他元素。常用的映射操作包括 `map()` 和 `flatMap()`。示例代码如下:
```java
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> uppercaseList = list.stream()
.map(String::toUpperCase)
.List());
// 输出:[APPLE, BANANA, ORANGE]
System.out.println(uppercaseList);
```
2.2 过滤操作
过滤操作可以根据指定的条件过滤流中的元素。常用的过滤操作包括 `filter()` 和 `distinct()`。示例代码如下:
sortedlist```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 5, 6);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.distinct()
.List());
// 输出:[2, 4, 6]
System.out.println(evenNumbers);
```
2.3 排序操作
排序操作可以对流中的元素进行排序。常用的排序操作包括 `sorted()` 和 `reversed()`。示例代码如下:
```java
List<Integer> numbers = Arrays.asList(5, 2, 3, 1, 4);
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.List());
// 输出:[1, 2, 3, 4, 5]
System.out.println(sortedNumbers);
```
三、终端操作
终端操作会触发流的执行,并生成结果或副作用。下面是一些常见的终端操作。
3.1 收集操作
收集操作可以将流中的元素收集到集合或其他数据结构中。常用的收集操作包括 `collect()` 和 `toArray()`。示例代码如下:
```java
List<String> list = Arrays.asList("apple", "banana", "orange");
String[] array = list.stream()
.toArray(String[]::new);
// 输出:[apple, banana, orange]
System.out.String(array));
```
3.2 聚合操作
聚合操作可以将流中的元素归约为一个值。常用的聚合操作包括 `reduce()` 和 `count()`。示例代码如下:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.reduce(0, Integer::sum);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论