如何将函数应用于每个集合元素以便在Guava中进行变异?

时间:2013-04-26 07:56:16

标签: java loops guava

我正在使用Guava 11(因为java 5)一年了,但我似乎没有找到一种方法来做Groovy的每个或Scala的foreach,也就是说,将函数应用于可以变异的集合的元素它们返回了变异元素的集合......所有关于Iterables,Collections等的方法实际上都不能做到这一点。我不想用于循环。也许Iterables.all()最好能达到这个目的,但没有办法做到这样的事情:

Iterable result = Iterables.each(Iterables.filter(c, predicate), function);

2 个答案:

答案 0 :(得分:7)

我不认为Guava包含一个方法,因为Java包含for-each循环:

for(Element x : collection){
  mutate(x);
}

编辑:更通用的方法是将for-each循环封装在方法中,并将变异策略作为参数传递给它:

interface Mutation<T> {
    void apply(T subject);
}

<T> Collection<? extends T> mutate(Collection<? extends T> input, Mutation<? super T> mutation) {
    for (T element : input) {
        mutation.apply(element);
    }
    return input;
}

答案 1 :(得分:1)

我刚刚找到了答案,最接近Groovy的每个方法的Guava收集方法是Iterables.all。如果所有成员都被修改或根本没有修改,则谓词会说。虽然不能链接方法调用,因为Iterables.all()返回boolean。