Java Stream API 的 map() 方法详解及与 mapToint() 的比较
Java Stream API 提供了强大的数据处理能力,其中 map() 方法是进行数据转换的重要工具。本文将深入探讨 map() 方法的用法,并将其与 mapToInt() 方法进行对比。
map() 方法的核心功能是将 Stream 中的每个元素转换为另一个元素,从而实现数据的转换或提取。它接收一个函数作为参数,该函数作用于 Stream 中的每一个元素,并返回一个转换后的值。这种转换并非仅限于简单的类型转换,而是涵盖了更广泛的数据处理场景。
例如,假设我们有一个 Person 对象列表,每个对象包含 name 和 age 属性。我们可以使用 map() 方法提取所有人的姓名,并将其转换为一个字符串列表:
立即学习“Java免费学习笔记(深入)”;
List<String> names = persons.stream() .map(Person::getName) .collect(Collectors.toList());
这段代码中,map(Person::getName) 将 persons 流中的每个 Person 对象映射到其 name 属性的值,最终收集成一个 String 列表。类似地,我们也可以提取所有人的年龄,或者计算每个名字的长度:
这里 map(String::length) 将 words 流中的每个字符串映射到其长度,最终得到一个 Integer 列表。
mapToInt() 方法是 map() 方法的一个特例,它专门用于将 Stream 中的元素转换为 int 类型。这在需要进行数值计算时非常有用,例如计算所有人的年龄总和:
int totalAge = persons.stream() .mapToInt(Person::getAge) .sum();
这段代码利用 mapToInt(Person::getAge) 将 persons 流中的每个 Person 对象的 age 属性转换为 int 类型,然后使用 sum() 方法直接计算总和。这比先使用 map() 方法转换,再进行数值计算更加高效简洁。
因此,mapToInt() 方法针对 int 类型数据处理效率更高,而 map() 方法适用范围更广,可以处理各种类型的数据转换。