当前位置: 首页 > 面试题库 >

Java8方法参考用作组合功能的Function对象

沈运恒
2023-03-14
问题内容

Java8中是否有一种方法可以将方法引用用作Function对象来使用其方法,例如:

Stream.of("ciao", "hola", "hello")
    .map(String::length.andThen(n -> n * 2))

这个问题与无关Stream,仅作为示例,我想对方法参考有答案


问题答案:

您可以编写一个静态方法来执行此操作:

import java.util.function.*;

class Test {
    public static void main(String[] args) {
        Function<String, Integer> function = combine(String::length, n -> n * 2);
        System.out.println(function.apply("foo"));
    }

    public static <T1, T2, T3> Function<T1, T3> combine(
        Function<T1, T2> first,
        Function<T2, T3> second) {
        return first.andThen(second);
    }
}

然后,您可以将其放在实用程序类中并静态导入。

或者,创建一个更简单的静态方法,该方法 返回给定的函数,以使编译器知道您在做什么:

import java.util.function.*;

class Test {
    public static void main(String[] args) {
        Function<String, Integer> function = asFunction(String::length).andThen(n -> n * 2);
        System.out.println(function.apply("foo"));
    }

    public static <T1, T2> Function<T1, T2> asFunction(Function<T1, T2> function) {
        return function;     
    }
}


 类似资料:
  • Function Composition是使用一个函数的输出作为另一个函数的输入的过程。 如果我们学习composition背后的数学会更好。 在数学中, composition由f{g(x)}表示,其中g()是一个函数,其输出用作另一个函数的输入,即f() 。 如果一个函数的输出类型与第二个函数的输入类型匹配,则可以使用任何两个函数实现函数组合。 我们使用点运算符(。)在Haskell中实现函数

  • 问题内容: 这是下面的我的mysql查询。通过许多有用的问题和评论,我几乎快步入尾声了。该查询背后的思想是用户提交一个链接,应用程序插入两行,一个插入链接,另一行插入投票(默认投票,为什么用户不为自己提交的文件投票?)然后每一个投票只是另一行在a或等于1的票数表中(不久将更改为保存在额外的列上。我那里也有流行度算法,这似乎使我的查询感到困惑。运行以下查询可确保出现此错误。 该查询的大部分要点是获取

  • 在编写了自己的通用功能接口并将其用于lambdas之后,我必须在一种新方法中使用它: 将通用数组作为输入处理,检查其最小长度是否为4 处理我的功能界面的任何实例 处理lambda表达式的任何实例,该表达式接受一个参数,但不返回任何内容 应用于函数接口实例的结果(这里我想我必须使用使用者) 以前从未使用过函数接口,有人能解释一下我应该如何将2个函数接口作为方法参数传递吗? 例如:

  • 我阅读了关于Lambda表达式的Java 8教程,但不太了解“引用特定类型的任意对象的实例方法”的方法引用示例 在同一教程中,有一个示例“引用特定对象的实例方法”,看起来像。 我可以看到这个工作,因为方法compareByName与Comparator.comparelambda(a, b)具有相同的签名- 现在“引用特定类型的任意对象的实例方法”示例使用String::compareToIgno

  • 目前正在学习Java 8 lambda表达式和方法引用。 我想把一个没有参数和返回值的方法作为参数传递给另一个方法。我就是这样做的: 我知道如

  • 要将您自己或其他库的函数应用于Pandas对象,您应该了解三个重要方法。 这些方法已在下面讨论。 使用的适当方法取决于您的函数是期望在整个DataFrame,行或列方式还是元素方式上运行。 表明功能应用:管道() 行或列智能函数应用程序:apply() 元素智能函数应用程序:applymap() 逐表函数应用 可以通过将函数和适当数量的参数作为管道参数传递来执行自定义操作。 因此,对整个DataF