Java 1.8 Stream 流 Map 元素转换

更新时间 2023-07-25 10:37:11

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第一个项目:全栈前后端分离博客项目,演示地址:http://116.62.199.48/, 1.0 版本已经更新完毕,正在更新 2.0 版本。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 224 小节,累计 35w+ 字,讲解图:1544 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1000+ 小伙伴加入,欢迎点击围观

在 Java 1.8 中,Stream API 提供了 map() 方法用于对流中的元素进行转换操作map() 方法可以将流中的每个元素映射为另一个值,从而得到一个新的流。

本小节将深入介绍 Java 1.8 中的 Stream 的 map() 方法,并通过示例代码演示如何使用它。

map() 方法概览

在 Stream API 中,map() 方法用于对流中的元素进行转换。

<R> Stream<R> map(Function<? super T, ? extends R> mapper)
  • map() 方法接受一个函数(Function)作为参数,该函数将流中的元素类型 T 转换为另一种类型 R。
  • map() 方法返回一个新的 Stream,其中包含了经过转换后的元素。

使用 map() 方法

让我们通过几个示例来说明如何使用 map() 方法。

示例 1:将整数列表每个元素加倍

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

// 使用 map() 方法将整数列表中的每个元素加倍
Stream<Integer> doubledNumbers = numbers.stream()
                                        .map(num -> num * 2);

doubledNumbers.forEach(System.out::println);
// 输出:
// 2
// 4
// 6
// 8
// 10

在这个例子中,我们首先创建一个整数列表 numbers。然后,我们使用 stream() 方法将列表转换为 Stream 对象,再使用 map() 方法将整数列表中的每个元素加倍,并得到一个新的 Stream。

示例 2:将字符串列表转换为大写

List<String> words = Arrays.asList("apple", "banana", "cherry");

// 使用 map() 方法将字符串列表中的每个元素转换为大写
Stream<String> upperCaseWords = words.stream()
                                     .map(word -> word.toUpperCase());

upperCaseWords.forEach(System.out::println);
// 输出:
// APPLE
// BANANA
// CHERRY

在这个例子中,我们首先创建一个字符串列表 words。然后,我们使用 stream() 方法将列表转换为 Stream 对象,再使用 map() 方法将字符串列表中的每个元素转换为大写,并得到一个新的 Stream。

示例 3:将自定义对象列表转换为特定属性列表

class Person {
    private String name;
    private int age;

    // 构造函数、Getter 和 Setter 方法

    public String getName() {
        return name;
    }
}

List<Person> people = Arrays.asList(
    new Person("Alice", 25),
    new Person("Bob", 30),
    new Person("Charlie", 22)
);

// 使用 map() 方法将自定义对象列表中的每个元素转换为姓名列表
Stream<String> names = people.stream()
                             .map(Person::getName);

names.forEach(System.out::println);
// 输出:
// Alice
// Bob
// Charlie

在这个例子中,我们首先创建一个自定义对象列表 people,其中包含了三个 Person 对象。然后,我们使用 stream() 方法将列表转换为 Stream 对象,再使用 map() 方法将自定义对象列表中的每个元素转换为姓名列表,并得到一个新的 Stream。

自定义转换函数

你可以根据需要自定义转换函数,根据元素的类型进行不同的转换。

总结

Java 1.8 中的 Stream API 提供了 map() 方法,用于对流中的元素进行转换。通过使用 map() 方法,你可以对流中的元素进行自定义操作,从而得到一个新的流。