3

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

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

2 回答 2

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;
}
于 2013-04-26T08:25:53.037 回答
1

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

于 2013-04-26T08:08:14.777 回答