繁体   English   中英

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

[英]Using method reference to remove elements from a List

我的代码出了什么问题?

我想从List list删除以A开头的所有元素:

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]

}

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

"A"::startsWith是一个可以分配给Predicate<String>的方法引用,当针对其他String测试该Predicate<String> ,它将检查字符串"A"是否以该其他String开头,而不是相反。

list.removeIf(TTT)不会从list删除任何内容,因为“A”既不是以“魔术师”也不是“助手”开头的。


您可以使用lambda表达式:

Predicate<String> TTT = s -> s.startsWith("A");

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

BiPredicate<String, String> b1 = String::startsWith;
BiPredicate<String, String> b2 = (string, prefix) -> string.startsWith(prefix);
System.out.println(b1.test("chicken", "chick"));
System.out.println(b2.test("chicken", "chick"));

方法参考结合了两种技术。 **startsWith()**是一个实例方法。 这意味着lambda中的第一个参数用作调用该方法的实例 第二个参数传递给startsWith()方法本身 这是方法引用如何节省大量输入的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM