当前位置: 首页 > 知识库问答 >
问题:

双冒号运算符可以引用源对象本身吗?[复制]

孔征
2023-03-14

在某些情况下,当我在对象列表上使用流时,我喜欢通过收集器收集它们。t映射函数,并将一个重要属性指定为键,将对象本身指定为值,如本例所示:

Map<String, SampleObject> map = list.stream()
    .collect(Collectors.toMap(SampleObject::getImportantValue, v -> v));

通常我使用双冒号操作符来分配键,但对于值,我求助于v-

这让我不禁好奇:

有没有办法使用双冒号将对象本身指定为匿名函数的返回值?从我自己的测试来看,SampleObjectSampleObject::似乎不起作用。(只符合逻辑,因为前者只引用类,而后者希望遵循一个方法)

作为一种天真的方法,我希望功能上类似于以下内容:

。。。collect(Collectors.toMap(SampleObject::getImportantValue,SampleObject:)


共有2个答案

狄鹏
2023-03-14

你应该使用JANO提供的答案,或者t-

但是,如果您真的想使用方法引用,您可以推出自己的方法:

class Functions {
    static <T> T identity(T t) {
        return t;
    }
}

然后突然

.collect(Collectors.toMap(SampleObject::getImportantValue, Functions::identity));

作品。

王杰
2023-03-14

而不是使用v-

 类似资料:
  • 问题内容: 如您所知,有一个功能快捷方式的建议,因此您可以编写: 它将在es5中像这样工作: 我的问题是:是否可以通过这种方式传递参数? 我的意思是用上述快捷方式编写此代码的方法: 这是React中很常见的模式,因此最好将其缩短一点。 问题答案: 否。bind运算符(规范建议)有两种形式: 方法提取 “虚拟方法”调用 obj::function(…) ≡ function.call(obj, …)

  • 刚刚在java中尝试了一些东西,发现了以下问题。 以下是我的代码。 父接口: 子接口: 实施1: 实施2: 主要方法: 我不确定我做错了什么,我在本地机器中安装了JDK 13并使用IntelliJ 2019.3和JDK 11。我检查了IntelliJ是否支持JDK 13 谢谢 错误更新我在那里留下了一个分号,删除了它,请再次检查。

  • 问题内容: 我正在探索Java 8源代码,发现代码的这一特殊部分非常令人惊讶: 是类似方法指针的东西吗?普通方法如何转换为? 问题答案: 通常,可以使用以下方法调用该方法: 仅调用就需要很多语法。那就是lambda表达式起作用的地方。从Java 8开始,它允许以更短的方式执行相同的操作: 这是如何运作的?Java编译器“检测”你要实现一个接受两个ints并返回一个的方法int。这等效于接口的唯一方

  • 我在探索Java 8的源代码时,发现代码的这一部分非常令人惊讶: 是否类似于方法指针?普通的方法如何转换为?

  • 问题内容: 显然,Java中冒号以多种方式使用。有人介意解释它的作用吗? 例如这里: 您将如何以不同的方式编写此循环,以便不合并? 问题答案: 在Java代码中冒号有几个地方: 1)跳出标签): 2)三元条件: 3)每个循环: 4)断言: 5)切换语句中的情况: 6)方法参考

  • 问题内容: 我看到过这样创建的对象: 但是我认为创建对象时括号不是可选的: 创建对象的前一种方法在ECMAScript标准中是否有效并定义?前一种创建对象的方式与后一种创建方式之间有什么区别吗?是一个比另一个更好的选择吗? 问题答案: 引用David Flanagan 1: 作为一种特殊情况,仅对于运算符,JavaScript通过在函数调用中没有参数的情况下允许省略括号来简化语法。以下是使用运算符