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

标签 java java-stream

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

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

编译器提示:

non-static method getFirstName() cannot be referenced from a static context

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

最佳答案

The value mapper should be a function ,即:

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

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

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

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

关于java - 不能从 Collectors.toMap 中的静态上下文引用非静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51614284/

相关文章:

java - 使用 ProGuard 后应用程序在移动设备上崩溃

java - SimpleDateFormat解析不正确

java - 当服务器返回错误时,使用 Immutables 进行改造会引发运行时异常

java - 使用流 API 搜索列表中的值并保持搜索位置(标准化测量数据)

Java 8 流 : Converting a list of objects to a set of objects

java - 如何引用位于单独库 jar 文件中的 OpenGL 着色器文件?

java - 如何使用 Java lambdas 收集新类型列表中的元素?

java-8 - 为什么 Stream API 中没有 flatten() 方法?

java - 使用平面图进行流分组

java - 我可以使用 Java 8+ 比 Java 7 及更低版本中更少的代码行来关闭 InputStream、Reader、Writer...吗?