JDK8重温Stream

109 阅读2分钟

自从 Java 8 在 2014 年问世以来,它为开发者带来了许多有趣的新特性,如 Lambda 表达式、接口默认方法等。其中,Stream API 是 Java 8 引入的一项重要特性,它带来了大量的新方法和 API 来简化数据处理的过程。在本文中,我们将详细介绍 Stream API 及其用法,并通过一些具体的 Java 示例代码来演示。

什么是 Stream?

Stream 是 Java 8 提供的一个新抽象,它允许您以声明性方式处理数据集合。与传统的 for 循环不同,Stream API 提供了一种更简洁、更易读的方式来处理数据。Stream API 可以用于对集合进行各种操作,如筛选、排序、映射等。

创建 Stream

要开始使用 Stream API,首先需要创建一个 Stream。常见的创建 Stream 的方法有以下几种:

  1. 从集合创建

  2. 从数组创建

  3. 使用 Stream.of 方法创建

  4. 使用 Stream.iterate 和 Stream.generate 方法创建

以下是一些创建 Stream 的示例代码:


import java.util.Arrays;

import java.util.List;

import java.util.stream.Stream;

public class Main {

public static void main(String[] args) {

// 从集合创建

List<String> names = Arrays.asList("Alice", "Bob", "Cathy", "David");

Stream<String> nameStream = names.stream();

// 从数组创建

String[] namesArray = new String[]{"Alice", "Bob", "Cathy", "David"};

Stream<String> nameArrayStream = Arrays.stream(namesArray);

// 使用 Stream.of 方法创建

Stream<String> nameOfStream = Stream.of("Alice", "Bob", "Cathy", "David");

// 使用 Stream.iterate 和 Stream.generate 方法创建

Stream<Integer> iterateStream = Stream.iterate(0, n -> n + 1);

Stream<Double> generateStream = Stream.generate(Math::random);

}

}

常用 Stream 操作

Stream API 提供了许多用于数据处理的方法,以下是一些常用操作的示例:

  1. filter:筛选出满足条件的元素

  2. map:将元素转换为其他类型或形式

  3. sorted:对元素进行排序

  4. collect:收集 Stream 的结果到集合


import java.util.Arrays;

import java.util.Comparator;

import java.util.List;

import java.util.stream.Collectors;

public class Main {

public static void main(String[] args) {

List<String> names = Arrays.asList("Alice", "Bob", "Cathy", "David");

// 筛选出长度大于3的字符串

List<String> filteredNames = names.stream()

.filter(name -> name.length() > 3)

.collect(Collectors.toList());

System.out.println(filteredNames); // [Alice, Cathy, David]

// 将字符串转换为大写

List<String> upperNames = names.stream()

.map(String::toUpperCase)

.collect(Collectors.toList());

System.out.println(upperNames); // [ALICE, BOB, CATHY, DAVID]

// 按字符串长度排序

List<String> sortedNames = names.stream()

.sorted(Comparator.comparingInt(String::length))

.collect(Collectors.toList());

System.out.println(sortedNames); // [Bob, Alice, Cathy, David]

}

}

此外,Stream API 还提供了一些其他有用的方法,如 forEach、toArray、reduce 等。以下是一些示例:


import java.util.Arrays;

import java.util.List;

import java.util.Optional;

public class Main {

public static void main(String[] args) {

List<String> names = Arrays.asList("Alice", "Bob", "Cathy", "David");

// 使用 forEach 遍历 Stream

names.stream().forEach(System.out::println);

// 将 Stream 转换为数组

String[] namesArray = names.stream().toArray(String[]::new);

System.out.println(Arrays.toString(namesArray));

// 使用 reduce 操作计算字符串长度之和

Optional<Integer> totalLength = names.stream()

.map(String::length)

.reduce(Integer::sum);

totalLength.ifPresent(System.out::println); // 16

}

}

Stream API 是 Java 8 提供的一种新的数据处理方式,它为开发者提供了一系列简洁、易读的数据处理方法。通过本文的介绍和示例代码,我们了解了如何创建 Stream,以及如何使用常用的 Stream 操作。希望这些知识能帮助您更好地利用 Java 8 的新特性,提高开发效率。