以下是Java SE 8针对Really Impatient的练习之一.
从Collection形成一个子类Collection2,并添加一个默认方法void forEachIf(Consumer action,Predicate filter),它将操作应用于filter返回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);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我有以下列表,我想对String.toUpperCase以"a"开头的字符串应用操作.我将如何使用它Collection2来实现这一目标?
public static void ex09()
{
Collection<String> l = new ArrayList<>();
l.add("abc");
l.add("zxx");
l.add("axc");
// What next???
}
Run Code Online (Sandbox Code Playgroud)
你需要创建一个实现的新类Collection2,
public class ArrayList2<E> extends ArrayList<E> implements Collection2<E>{
}
Run Code Online (Sandbox Code Playgroud)
然后只使用你的新课程:
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"));
}
Run Code Online (Sandbox Code Playgroud)
哪个在运行时会打印:
ABC
AXC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |