Java 如何使用::运算符作为此引用
使用流API可以轻松地将具有Java 如何使用::运算符作为此引用,java,lambda,java-8,method-reference,Java,Lambda,Java 8,Method Reference,使用流API可以轻松地将具有id的对象列表Foo转换为具有该id作为键的Map: public class Foo{ private Integer id; private .... getters and setters... } Map<Integer,Foo> myMap = fooList.stream().collect(Collectors.toMap(Foo::getId, (foo) -> foo)); 公共类Foo{ 私有整数id
id
的对象列表Foo
转换为具有该id
作为键的Map
:
public class Foo{
private Integer id;
private ....
getters and setters...
}
Map<Integer,Foo> myMap =
fooList.stream().collect(Collectors.toMap(Foo::getId, (foo) -> foo));
公共类Foo{
私有整数id;
私有的
接球手和接球手。。。
}
Map myMap=
collector.toMap(Foo::getId,(Foo)->Foo));
是否有任何方法可以使用
:
操作符将lambda表达式:(foo)->foo
替换为其他内容?类似于Foo::this
虽然它不是方法引用,但您需要的是Function.identity()
:
Map<Integer,Foo> myMap =
fooList.stream().collect(Collectors.toMap(Foo::getId, Function.identity()));
Map myMap=
collect(Collectors.toMap(Foo::getId,Function.identity());
您可以使用函数.identity()
替换foo->foo
lambda
如果您确实想演示方法引用,可以编写一个无意义的方法
class Util {
public static <T> T identity(T t) { return t; }
}
Function.identity()
和x->x
之间有区别,这一点解释得很好,但有时我倾向于第二种方法;它不那么冗长,而且当管道复杂时,我倾向于使用:x->x
非常感谢,我试图找到并询问答案,但没有成功,但这似乎是一个重复的答案。
( ... ).stream().collect(Collectors.toMap(Foo::getId, Util::identity));