java-8 - 在 Java 8 中传递对实例方法的引用

标签 java-8

我有一个类,它有多个返回相同类型的方法。因此,例如,我有以下对象定义:

interface MyClass {
  String first();
  String second();
}

然后我有一个方法,它接受此类的对象列表,并且应该根据参数调用 first()second() 方法。一个例子:

void myMethod(List<MyClass> objs, boolean executeFirst) {
    objs.forEach(obj -> System.out.println(executeFirst ? obj.first() : obj.second()));
}

是否有任何方法可以将 executeFirst 参数替换为对我想要在 objs 对象上执行的实例方法的引用?因此,举例来说,理想情况下我想要这样的东西:

void myMethod(List<MyClass> objs, Supplier<String> instanceMethod) {
    objs.forEach(obj -> System.out.println(obj::instanceMethod.get());
}

最佳答案

您需要一个Function<MyClass, String> ,不是供应商:

public void foo() {
    myMethod(someList, MyClass::first);
}

void myMethod(List<MyClass> objs, Function<MyClass, String> instanceMethod) {
    objs.forEach(obj -> System.out.println(instanceMethod.apply(obj));
}

关于java-8 - 在 Java 8 中传递对实例方法的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48158160/

相关文章:

java - 在Windows机器上获取手动设置的时区

java - 为什么没有 OptionalInt.ofNullable(Integer);

Java - Mac 应用程序需要安装 JDK 才能运行

java - 包装字符串键以区分外部键和内部键

java - 嵌套 if-object-null-return 方法提取或替代 Sonar 认知复杂性

java8 流不会更改类成员

java8 将字符串数组转换为映射(奇数索引为键,偶数索引为值)

lambda - Collectors.toMap 的 mergeFunction 是否允许修改其参数?

java - Eclipse:类型推断期间为 "Unknown error"

java - 如何使用 Java 8 Stream 扩展和重组列表列表?