我有一个学生列表,我想将其转换为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));