我现在使用Guava 11(因为java 5)一年了,但我似乎没有找到一种方法来做Groovy的每一个或Scala的foreach,也就是说,将函数应用于集合的元素,可以改变它们和那个返回变异元素的集合... Iterables,Collections等上的所有这些方法实际上都不能做到这一点.我不想用于循环.也许Iterables.all()可以最好地服务于这个目的,但是没有办法做这样的事情:
Iterable result = Iterables.each(Iterables.filter(c, predicate), function);
Run Code Online (Sandbox Code Playgroud)
我不认为Guava包含一个方法,因为Java包含for-each循环:
for(Element x : collection){
mutate(x);
}
Run Code Online (Sandbox Code Playgroud)
编辑:一种更通用的方法是将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;
}
Run Code Online (Sandbox Code Playgroud)