不能从 Collectors.toMap 中的静态上下文引用非静态方法

Emd*_*dee 6 java java-stream

我有一个学生列表,我想将其转换为Map<String, Integer>,其中映射键应该是学生的名字。为了保持代码示例简单,我将映射值指定为1

final Map<String, Integer> map = someStudents.stream().collect(
        Collectors.toMap(Student::getFirstName, 1));
Run Code Online (Sandbox Code Playgroud)

编译器抱怨:

不能从静态上下文中引用非静态方法 getFirstName()

任何的想法?我很困惑,因为许多示例使用相同的方法传递对非静态方法的引用。为什么编译器会在这里看到静态上下文?

Ous*_* D. 4

值映射器应该是一个函数,即:

.collect(Collectors.toMap(Student::getFirstName, s -> 1));
Run Code Online (Sandbox Code Playgroud)

该函数s -> 1本质上将学生作为输入,并1在这种特定情况下返回地图值。

以下代码无效,因为文字值1不是函数。

.collect(Collectors.toMap(Student::getFirstName, 1));
Run Code Online (Sandbox Code Playgroud)