静态上下文无法访问收集器中的非静态上下文

2024-01-15

我有一群学生。首先,我想按标记对它们进行分组。然后我想进一步将这些集合分组为同名学生。

Map<Integer,Map<String,List<String>>> groupping = students.stream()
                                                    .collect(Collectors.groupingBy(Student::getMarks, 
                                                            Collectors.mapping(Student::getName,Collectors.toList())));

我收到一条错误消息,

不能从静态上下文引用非静态方法。

是的。我非常清楚,如果没有实例,我就无法引用非静态方法。但是对于所有这些流操作,我对到底出了什么问题有点困惑。

而不是如何解决这个问题;我真的很想知道这里发生了什么事。感谢您的任何意见!

因为如果我写下面的分组是完全有效的;

Map<Integer,List<Student>> m = students.stream().
        collect(Collectors.groupingBy(Student::getMarks));

这是我的 Student.java 类(如果你需要的话)

public class Student {
    private String name;
    private int marks;
    // getters, setters, constructor and toString
}

不幸的是,错误消息“无法从静态上下文引用非静态方法”。当涉及方法引用时,它只是任何类型不匹配问题的占位符。编译器根本无法确定实际问题。

在您的代码中,目标类型Map<Integer, Map<String, List<String>>>与组合收集器的结果类型不匹配Map<Integer, List<String>>,但编译器没有尝试确定此(独立)结果类型,因为合并方法引用的(嵌套)泛型方法调用需要目标类型来解析方法引用。因此它不会报告分配的类型不匹配,而是报告解决方法引用的问题。

正确的代码就是

Map<Integer, List<String>> groupping = students.stream()
    .collect(Collectors.groupingBy(Student::getMarks, 
             Collectors.mapping(Student::getName, Collectors.toList())));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态上下文无法访问收集器中的非静态上下文 的相关文章

随机推荐

  • 不会向内部用户发送 TestFlight 邀请电子邮件

    我为 TestFlight 设置了我的应用程序 对于外部用户 它正在等待审核 但如果我想邀请内部用户 我会选择他们并按邀请 iTunes Connects 表示他们现在已收到邀请 但受邀请的电子邮件均未收到邀请电子邮件 你知道我做错了什么吗
  • GRAV 子导航

    我尝试制作我的第一个网站GRAV http getgrav org内容管理系统 现在在我的pages folder它看起来像这样 主页 默认 md about 关于 seite1 default md 关于 seite2 default m
  • 带工具提示的 WPF 自定义验证器

    我想为我的 WPF 应用程序创建一个自定义验证器模板 我有一个工具提示模板
  • Linq2Sql 将记录插入相关表

    类似情况 如何使用 LINQ2SQL 添加多个相关记录 https stackoverflow com questions 630320 how to add several dependent records with linq2sql
  • 这里 JavaScript API 3.0 - 如何实现可拖动标记

    我想用最近发布的 JavaScript API 3 0 实现一个可拖动标记 使用旧的 API 非常简单 将draggable 属性设置为true 后 您可以移动地图上的标记 位于 此处 1 的新 API 3 0 的迁移指南指出 在地图对象上
  • 为什么 Android 上的 Chrome 原生 HTML5 日期选择器变得非常慢?

    我的网站上有一个日期选择器 它只使用默认的 html5 日期选择器 我注意到 直到几周前 它都工作正常 但自从 Chrome Android 最近更新后 他们引入了一个新的日期选择器 而这个日期选择器真的很慢而且反应迟钝 加载需要几秒钟 我
  • 如何在Java中扩展final类

    这是我现在面临的实际问题 我有课 比方说Foo这个类定义了一个名为的方法getBar返回一个Bar实例 班上Bar被定义在里面Foo并且 并 被声明public static final 我想做的是定义一个类MyFoo延伸Foo但我也想延长
  • SQL简单减法查询

    我有一个数据库 它包含 2 个表 让我将它们称为表 A 和表 B 表A内容 Date 供应商名称 交付货物名称 交付的货物数量 简单地说是成分 A 数值 表B内容 生产日期 产品名称 成分 A 我真正想要的是 使用表 A 第 4 列减去 减
  • “Options”属性的默认值无法绑定到特定线程

    我发现当我改变班级时 public class MarkdownEditorOptions ObservableObject to public class MarkdownEditorOptions INotifyPropertyChan
  • 插入图像/PNG ggplot2 - Cowplot

    我正在尝试使用cowplot包draw image 功能 我已经设法在图表中获取图像作为示例 我无法弄清楚 xy 位置是如何工作的 我必须不断输入随机数 直到看到图像 require ggplot2 required packages re
  • 更改 Visual Studio 2008 项目中文件夹中整个文件的属性

    我通过从资源管理器中拖放来向我的 Visual Studio 2008 项目添加一个文件夹 我想将该文件夹中整个文件的 复制到输出目录 属性更改为 始终复制 问题是该文件夹包含许多子文件夹 子文件夹也是如此 因此 无法一步阻止所有文件并更改
  • MongoDB 查找精确数组匹配但顺序并不重要

    我正在查询查找精确的数组匹配并成功检索它 但是当我尝试查找具有不同顺序的值的精确数组时 它会失败 Example db coll insert user harsh hobbies 1 2 3 db coll insert user kau
  • 使用 Selenium WebDriver 将鼠标悬停并单击隐藏元素

    当我开始使用 Selenium 时 我发现很难对隐藏元素执行操作 悬停 单击等 这些元素只有在悬停在其他元素上时才可见 所以我希望这对其他人有帮助 您可以使用以下任何一种方法 例如 要upvote此页面中的评论 我需要将鼠标悬停在上下文 即
  • Google API - 如何将 URL 重定向到我的本地主机

    我正在努力使用 Google OAuth 将 google 登录集成到我的 Phonegap 应用程序中 发生的情况是 在为我的应用程序创建客户端 ID 时 我必须选择 已安装的应用程序 然后将应用程序类型选择为 其他 因为我是使用 Pho
  • 可用的游戏网络协议定义语言和代码生成

    我一直在寻找一个好的通用二进制网络协议定义框架 以提供一种用多种语言 例如 Java 后端服务器和 iPhone 前端 编写实时游戏服务器和客户端 例如 魔兽世界 或 雷神之锤 III 的方法用 Objective C 和 Cocoa 编写
  • 从本地文件访问 localStorage

    我正在创建 2HTML文件将存储在本地 iPhone 上并通过WebView 我想知道是否可以设置localStorage在一个文件中 并从另一个文件中获取存储结果 我知道localStorage可以从同一域上的文件访问 但是 您似乎无法从
  • Docker /var/lib/docker/overlay2//merged:没有这样的文件或目录

    我收到以下错误并且找不到任何解决方案 9 builder 3 5 COPY app 9 sha256 deb3e9c3d0d018c2253369e84f48bc653a4796eebadd10de1a2bb60b4954e239 9 ER
  • minwindef.h 中的 IN 和 OUT 宏

    这些在 minwindef h 中定义 通常位于 Program Files x86 Windows Kits 8 1 Include shared minwindef h ifndef IN define IN endif ifndef
  • 为什么 C++ 将 unsigned char 值打印为负数?

    我试图理解 C 中的隐式转换规则 并且我理解当两个主要类型之间存在一个操作时 较低类型 将提升为 较高类型 因此可以这样说 int a 5 float b 0 5 std cout lt lt a b lt lt n 应该打印 5 5 因为
  • 静态上下文无法访问收集器中的非静态上下文

    我有一群学生 首先 我想按标记对它们进行分组 然后我想进一步将这些集合分组为同名学生 Map