使用方法引用从List中删除元素

Has*_*hra 6 java java-8

我的代码出了什么问题?

我想删除所有的元素开始一个来自List list:

public static void main(String[] args) {

    Predicate<String> TTT = "A"::startsWith;
    List<String> list = new ArrayList<>();

    list.add("Magician");
    list.add("Assistant");
    System.out.println(list); // [Magician, Assistant]

    list.removeIf(TTT);
    System.out.println(list); // expected output: [Magician]

}
Run Code Online (Sandbox Code Playgroud)

但是,removeIf不会从列表中删除任何内容.

Era*_*ran 7

"A"::startsWith是一个可以分配给a的方法引用,Predicate<String>Predicate<String>针对其他方法进行测试时String,它会检查String是否以其他方式"A"开始String,而不是相反.

list.removeIf(TTT)不会删除任何东西list,因为"A"既不是以"魔术师"也不是"助手"开头的.


您可以使用lambda表达式:

Predicate<String> TTT = s -> s.startsWith("A");
Run Code Online (Sandbox Code Playgroud)

原始"A"::startsWith谓词从列表中删除任何内容的唯一方法是列表是否包含String "A"空格式String.

  • @HasnainAliBohra嗯,你做不到.至少没有使用`"A":: startsWith`方法引用.您可以创建一个静态方法来检查String是否以"A"开头 - "public static startsWithA(String s){return s.startsWith("A");}` - 并使用该方法的引用`YourClass :: startsWithA` .我不认为这会有多大意义. (2认同)