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

如何使用Java8方法引用表示“(String a)->a.CONTAINS(”O“)”

公羊新
2023-03-14

Obj.TestPredicate(list,String::Contains);

我在“String::Contains”中得到错误:不能从静态上下文引用非静态方法。但contains不是静态方法。我被那些小费弄糊涂了。

我的代码如下:

public <T> List<T> testPredicate(List<T> list , Predicate<T> predicate){
    List<T> result = new ArrayList<>();
    for(T t: list){
        if(predicate.test(t)){
            result.add(t);
        }
    }
    return result;
}
@Test
public void testPredicate() throws Exception {
    List<String> listTemp = lambda.testPredicate(list, s -> s.contains("o"));
    System.out.println(listTemp);
}

(2)如果func是一个实例方法,那么someClass::func是一个lambda,它使用第一个参数作为实例,正如您所想的:(a,b,c)->a.func(b,c);

与my(String a,String b)没有区别->a包含(b);为什么方法引用不起作用?

共有1个答案

葛鸿轩
2023-03-14

您可以创建自己的谓词:

public class StringPredicates {
  public static Predicate<String> contains(String contained) {
    return s -> s.contains(contained);
  }
}

那么您可以类似于以下方式使用它们:

obj.testPredicate(list, StringPredicates.contains("o"));

请注意,您不需要方法引用来使用这样的构造。正如我常说的:在需要的时候使用正确的工具!在本例中,您有一个变量,因此不建议使用方法引用。

public static boolean containsO(String s) {
  return s.contains("o");
}
obj.testPredicate(list, StringPredicates::containsO);
 类似资料:
  • 我正在通过一个例子,它从与方法引用相关的当前目录中提取一个隐藏文件数组,如下所述 使用匿名内部类实现 使用方法参考实现 我的问题是接口只有一个抽象方法(),而实现accept-method-using-method-reference在类中使用的有效性如何。我了解到,只有当参数与抽象方法匹配时,我们才能应用方法引用,但是这里method有一个类型的参数,但是没有参数。你能解释一下它的有效性吗。

  • “String::contains”是错误的。但是如何表达lambda呢? 此外,当我在IntelliJ IDEA中写这篇文章时: obj。testPredicate(列表,字符串::contains); 我得到的错误在"字符串::c":非静态方法不能被引用从一个静态的上下文。我被这些提示弄糊涂了。 我的代码如下: 这是来电者: 为什么最简单的lambda不能被方法引用替换? 我看到了使用方法引用

  • 主要内容:1 Java8 方法引用的介绍,2 Java8 方法引用的分类,3 Java8 方法引用:引用静态方法,4 Java8 方法引用:引用实例方法,5 Java8 方法引用:引用构造方法1 Java8 方法引用的介绍 Java提供了一个新功能,称为Java 8中的方法引用。方法引用用于引用功能接口的方法。它是lambda表达式的紧凑和简单形式。每次使用lambda表达式仅引用方法时,都可以将lambda表达式替换为方法引用。在本教程中,我们将详细解释方法参考概念。 2 Java8 方法引用

  • 本文向大家介绍使用Java8中的方法引用来引用实例方法,包括了使用Java8中的方法引用来引用实例方法的使用技巧和注意事项,需要的朋友参考一下 Java中的Lambda表达式使您可以将功能作为参数传递给方法。您也可以使用lambda表达式调用现有方法。 方法引用是简单,易于阅读的lambda表达式,可通过lambda表达式中的名称来调用/引用和现有方法。 语法 以下是在Java中引用实例方法的语法

  • 我对方法引用在Java8中是如何工作的有些困惑。我编写了下面的代码段用于过滤文件夹中的隐藏文件。他们正在产生正确的结果。我不理解->listFiles方法的方法签名是如何在这个代码段的选项2中工作的。 这是我在Java8文档中发现的

  • 本文向大家介绍使用Java8中的方法引用来引用构造函数,包括了使用Java8中的方法引用来引用构造函数的使用技巧和注意事项,需要的朋友参考一下 Java中的Lambda表达式使您可以将功能作为参数传递给方法。您也可以使用lambda表达式调用现有方法。 方法引用是简单,易于阅读的lambda表达式,可通过lambda表达式来调用/引用以及现有方法的名称。除了实例和静态方法,您还可以使用new关键字