如何使用:: operator作为此引用

use*_*002 9 java lambda java-8 method-reference

转换对象的列表Foo具有id,向Map<Integer,Foo>与该id关键,是容易使用流API:

public class Foo{
    private Integer id;
    private ....
    getters and setters...
}

Map<Integer,Foo> myMap = 
fooList.stream().collect(Collectors.toMap(Foo::getId, (foo) -> foo));
Run Code Online (Sandbox Code Playgroud)

有没有办法替换lambda表达式:(foo) -> foo使用::运算符的东西?就像是Foo::this

Era*_*ran 7

虽然它不是方法参考,但Function.identity()您需要的是:

Map<Integer,Foo> myMap = 
    fooList.stream().collect(Collectors.toMap(Foo::getId, Function.identity()));
Run Code Online (Sandbox Code Playgroud)


And*_*lko 6

您可以使用它Function.identity()来替换foo -> foolambda.


如果您真的想要演示方法引用,可以编写一个无意义的方法

class Util {
    public static <T> T identity(T t) { return t; }
}
Run Code Online (Sandbox Code Playgroud)

并通过方法参考引用它Util::identity:

( ... ).stream().collect(Collectors.toMap(Foo::getId, Util::identity));
Run Code Online (Sandbox Code Playgroud)