Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用::运算符作为此引用_Java_Lambda_Java 8_Method Reference - Fatal编程技术网

Java 如何使用::运算符作为此引用

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

使用流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;
私有的
接球手和接球手。。。
}
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));