首页 > 解决方案 > Lambda 表达式 java 8 映射方法

问题描述

java 8中map方法的语法是:

<R> Stream<R> map(Function<? super T,? extends R> mapper)

但我可以使用 lambda 表达式:

personList.stream().filter(p -> p.getPersonType().equals("student"))
            .map(p -> new Student(p.getId(), p.getName()))
            .collect(Collectors.toList());

map 方法中的参数如何等同于 Function 数据类型。请帮助我理解这一点。

谢谢

标签: lambdajava-8

解决方案


Function<? super T,? extends R> mapper该方法的函数map基本上表示任何采用一个参数并返回一个值的函数,因此在这种特定情况下,lambdap -> new Student(p.getId(), p.getName()) 是一个采用Personp 并返回 a的函数,Student因此非常适合。

换个角度看,lambda 等效于:

.map(new Function<Person, Student>() {
     @Override
      public Student apply(Person p) {
            return new Student(p.getId(), p.getName());
      }
})

推荐阅读