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