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

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

编译器提示:



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

最佳答案

The value mapper should be a function,即:

.collect(Collectors.toMap(Student::getFirstName, s -> 1));

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

以下代码无效,因为文字值1不是函数。
.collect(Collectors.toMap(Student::getFirstName, 1));

10-06 11:05