LongStream mapToLong(ToLongFunction<? super T> mapper)
方法是 Java 中 Stream
接口的一部分,用于将流中的每个元素通过给定的函数 mapper
转换成一个 long
类型的值,并将这些 long
值组成一个新的 LongStream
。这个方法主要用于类型转换,特别是当你需要从对象中提取一个 long
类型的字段或属性时非常有用。
解释
- 参数:
ToLongFunction<? super T> mapper
是一个函数式接口,它接受一个类型为T
的参数,并返回一个long
类型的结果。这里的? super T
表示mapper
可以接受T
或其父类型的对象作为输入。 - 返回值:方法返回一个
LongStream
,即一个包含long
类型元素的流。 - 作用:对原始流中的每个元素应用
mapper
函数,将其转换为long
类型的值,并将这些值作为新流的元素。
使用示例
假设我们有一个员工类 Employee
,其中包含员工的 ID(long
类型)和姓名(String
类型)。我们想要从一个包含多个 Employee
对象的流中提取所有员工的 ID。
首先,定义 Employee
类:
public class Employee {
private long id;
private String name;
public Employee(long id, String name) {
this.id = id;
this.name = name;
}
public long getId() {
return id;
}
// 省略其他getter和setter
}
然后,使用 mapToLong
方法提取所有员工的 ID:
import java.util.stream.LongStream;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
// 创建一个包含员工对象的流
Stream<Employee> employees = Stream.of(
new Employee(1, "张三"),
new Employee(2, "李四"),
new Employee(3, "王五")
);
// 使用 mapToLong 提取所有员工的 ID
LongStream employeeIds = employees.mapToLong(Employee::getId);
// 打印所有员工的 ID
employeeIds.forEach(System.out::println);
}
}
在这个示例中,我们首先创建了一个包含三个 Employee
对象的流。然后,我们使用 mapToLong
方法和方法引用 Employee::getId
来提取每个员工的 ID,并将这些 ID 组成一个新的 LongStream
。最后,我们遍历这个 LongStream
,打印出所有员工的 ID。