自从 Java 8 引入了 Stream API,Java 开发者们便获得了一个强大的工具来处理集合和其他可遍历的数据结构。Stream API 提供了一种声明式的编程方式来操作数据,允许我们以一种更加简洁、优雅的方式来编写代码。本文将探讨如何使用 Stream API 对各种数据类型进行转换,并给出一些实用的示例。
什么是 Stream?
在 Java 8 中,Stream
是一种对集合数据进行操作的接口。它允许你通过一系列方法调用来处理数据,这些方法可以分为中间操作(如 filter
, map
)和终止操作(如 collect
, forEach
)。流的操作可以是懒惰的,即它们不会立即执行,而是等待终端操作时才执行。
基本概念
在深入探讨之前,让我们先回顾一下几个基本概念:
- 源:产生数据的地方,比如集合、数组等。
- 中间操作:对流中的数据进行过滤、映射等操作。
- 终端操作:执行后会生成结果或副作用,之后流会被关闭。
数据类型转换
示例 1: 字符串列表到整数列表的转换
假设我们有一个字符串列表,其中每个字符串都是一个数字,我们想要将其转换为整数列表。
java
深色版本
1List<String> stringNumbers = Arrays.asList("1", "2", "3");
2List<Integer> intNumbers = stringNumbers.stream()
3 .map(Integer::parseInt)
4 .collect(Collectors.toList());
示例 2: 数字列表到平方数列表的转换
如果有一个整数列表,我们想要得到这个列表中每个数字的平方值。
java
深色版本
1List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
2List<Integer> squaredNumbers = numbers.stream()
3 .map(n -> n * n)
4 .collect(Collectors.toList());
示例 3: 集合到 Map 的转换
有时我们需要从集合中构建一个 Map,例如,给定一个用户列表,我们希望根据用户名来构建一个 Map。
java
深色版本
1List<User> users = Arrays.asList(
2 new User("Alice", 25),
3 new User("Bob", 30)
4);
5
6Map<String, User> usersByName = users.stream()
7 .collect(Collectors.toMap(User::getName, u -> u));
示例 4: 从 JSON 字符串到对象的转换
如果我们有一个 JSON 字符串列表,我们可能需要将其转换成对象列表。这里我们假设使用 Jackson 库来完成序列化和反序列化。
java
深色版本
1List<String> jsonUsers = Arrays.asList(
2 "{\"name\":\"Alice\",\"age\":25}",
3 "{\"name\":\"Bob\",\"age\":30}"
4);
5
6List<User> users = jsonUsers.stream()
7 .map(json -> {
8 try {
9 return mapper.readValue(json, User.class);
10 } catch (IOException e) {
11 throw new RuntimeException(e);
12 }
13 })
14 .collect(Collectors.toList());
总结
Stream API 使得在 Java 中处理数据变得更加简单且强大。通过使用中间操作和终端操作,我们可以轻松地进行数据过滤、映射、聚合等操作。上述示例展示了如何使用 Stream API 进行不同类型之间的转换,希望这些示例能帮助你在日常开发中更有效地利用这一功能。