代码之家  ›  专栏  ›  技术社区  ›  Hasnain Ali Bohra

使用方法引用从列表中删除元素

  •  7
  • Hasnain Ali Bohra  · 技术社区  · 8 年前

    我的代码怎么了?

    我想删除从 A. 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]
    
    }
    

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

    2 回复  |  直到 8 年前
        1
  •  7
  •   azro    8 年前

    "A"::startsWith 是可以分配给 Predicate<String> ,然后 谓词<字符串(>); 是针对其他人测试的 String "A" 从另一个开始

    list.removeIf(TTT) list ,因为“A”既不是以“魔术师”也不是以“助手”开头。


    可以改用lambda表达式:

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

    只有这样你的原创 “A”::开始 如果列表包含 或者一个空的 一串

        2
  •  0
  •   Hasnain Ali Bohra    8 年前
    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中的第一个参数 作为调用方法的实例 第二个参数传递给 。这是方法引用如何保存