无法弄清楚用法

时间:2014-07-14 14:16:52

标签: java-8 lambda

以下是Java SE 8针对Really Impatient的练习之一。

  

从Collection形成子类Collection2并添加默认方法   void适用的forEachIf(使用者操作,谓词过滤器)   对过滤器返回true的每个元素的操作。你怎么能   用吗?

以下是我对Collection2的定义。我无法弄清楚如何使用它。

public interface Collection2<E> extends Collection<E>
{

    default void forEachIf(Consumer<E> action, Predicate<E> filter)
    {
        forEach(e -> {
            if (filter.test(e))
            {
                action.accept(e);
            }
        });
    }
}

所以,我有以下列表,我想对以&#34; a&#34;开头的字符串应用String.toUpperCase操作。我如何使用Collection2来实现这一目标?

public static void ex09()
{
        Collection<String> l = new ArrayList<>();
        l.add("abc");
        l.add("zxx");
        l.add("axc");

        // What next???

}

1 个答案:

答案 0 :(得分:6)

您需要创建一个实现Collection2

的新类
public class ArrayList2<E> extends ArrayList<E> implements Collection2<E>{

}

然后只使用你的新课程:

public static void ex09()
{
    Collection2<String> l = new ArrayList2<>();
    l.add("abc");
    l.add("zxx");
    l.add("axc");

    l.forEachIf(  (s)->System.out.println(s.toUpperCase()),
                  (s)-> s.startsWith("a"));


}

运行时会打印:

ABC
AXC