Lambda 表达式 java 8 映射方法

jay*_*att 5 lambda java-8

java 8中map方法的语法是:

<R> Stream<R> map(Function<? super T,? extends R> mapper)
Run Code Online (Sandbox Code Playgroud)

但我可以使用 lambda 表达式:

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

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

谢谢

Ous*_* D. 6

该功能Function<? super T,? extends R> mapper的的map方法基本上代表任何功能采取一个参数并在该特定情况下返回一个值,因此拉姆达p -> new Student(p.getId(), p.getName()) 是一个函数采取Personp和返回Student因此配合到该完美。

换个角度来看,lambda 相当于:

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

  • 当我被困在这里时,我发现这个解释 https://www.infoq.com/articles/Java-8-Lambdas-A-Peek-Under-the-Hood 也很有帮助。 (2认同)