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

java.util.function.function.identity方法的实际用途是什么?

蒋健
2023-03-14

当function.identity()返回与它接收到的相同的东西时,我为什么要使用它,而不使用输入或以某种方式修改输入?

Apple apple = new Apple(10, "green");
Function<Apple, Apple> identity = Function.identity();
identity.apply(apple);

这一定有一些实际的用法,但我不知道。

共有1个答案

楚举
2023-03-14

预期的用法是当您使用一个接受function的方法来映射某些内容时,您需要将输入直接映射到函数的输出(“identity”函数)。

作为一个非常简单的示例,将人员列表映射到从姓名到人员的映射:

import static java.util.function.Function.identity

// [...]

List<Person> persons = ...
Map<String, Person> = persons.stream()
        .collect(Collectors.toMap(Person::name, identity()))

identity()函数只是为了方便和可读性。正如Peter在他的回答中指出的,您可以只使用t->t,但我个人认为使用identity()可以更好地传达意图,因为它没有留下解释的空间,比如怀疑原作者是否忘记在lambda中进行转换。但我承认这是非常主观的,并且假设读者知道identity()是做什么的。

 类似资料:
  • 问题内容: ECMAScript 6中引入的数据结构的实际用途是什么? 由于弱映射的键会对其对应的值建立强引用,因此确保只要弱键仍处于活动状态,插入到弱映射中的值就 永远不会 消失,因此不能将其用于备忘录表,缓存或通常使用弱引用,具有弱值的映射等的其他任何内容。 在我看来,这是: …只是一种回旋的说法: 我缺少哪些具体用例? 问题答案: 从根本上 WeakMaps提供了一种从外部扩展对象而不干扰垃

  • ECMAScript 6中引入的数据结构的实际用途是什么? 由于弱映射的键创建对其对应值的强引用,确保插入到弱映射中的值在其键仍处于活动状态时永远不会消失,因此它不能用于备注表、缓存或您通常使用弱引用、具有弱值的映射等的任何其他内容。 在我看来: …只是一种迂回的说法: 我缺少哪些具体的用例?

  • 问题内容: 我正在尽最大的努力来解决JavaScript闭包问题。 通过返回一个内部函数,我可以访问其直接父级中定义的任何变量。 这对我有用吗?也许我还没有完全解决这个问题。我在网上看到的大多数示例都没有提供任何真实的代码,只是模糊的示例。 有人可以告诉我现实世界中使用闭包吗? 例如这个吗? 问题答案: 我用闭包来做类似的事情: 如您所见,现在有一个对象,带有一个方法()调用,该方法仅存在于闭包内

  • 问题内容: 在Java中,接口的任何使用都由抽象类实现。我知道接口的一个优点是,如果我们实现一个接口,那么我们也可以扩展另一个类。Java接口还有其他用途或优点吗? 问题答案: 您喜欢什么:在一个Abstract类中成千上万个抽象方法并继承该类,或者为特定的抽象方法创建尽可能多的接口,并通过继承所需的任意数量的接口来仅使用您想要的那些方法… 因此,仅通过继承特定接口使用该方法即可,如果您要继承类,

  • 问题内容: 我正在尝试使用以下代码来理解: 产生输出: 什么是和这里?文档说明中说: 返回指定的文字模式。 此方法产生一个,可用来创建一个与字符串相匹配的,就好像它是文字模式一样。 输入序列中的元字符或转义序列将没有特殊含义。 但是的返回类型不是编译对象。 为什么需要此方法?使用示例有哪些? 问题答案: 表示“文字文本的开始”(即正则表达式“开引号”) 表示“文字文本的结束”(即正则表达式“闭引号

  • 问题内容: 我知道Javassist是一个Java库,提供了一种操作应用程序的Java字节码的方法。 好的,但是为什么我们需要操纵字节码? 有什么真实的例子吗?任何真正的应用程序,javassist在哪里使用? 问题答案: 一个常见的应用是在运行时生成代理类,即在运行时创建一个子类,以拦截所有方法调用。例子: Hibernate 使用代理来拦截对实体的方法调用以实现延迟加载,即,在首次访问对象时从