2010-03-25 58 views
0

我通过javadoc阅读并找不到类似它的任何内容。Google Collections API是否具有Ruby Enumerable#inject方法的等效功能?

+0

也许如果你告诉我们可怜的java用户什么'Enumerable#inject' does ... – skaffman 2010-03-25 20:48:54

+1

@skaffman:http://en.wikipedia.org/wiki/Fold_(higher-order_function) – 2010-03-25 20:52:44

+0

另一个库(Jaggregate)有http://jaggregate.sourceforge.net/javadoc/jaggregate/Collection.html#inject%28R,%20jaggregate.BinaryFunctor%29 – Yardena 2010-03-25 21:01:15

回答

2

不,它没有。

虽然它确实具有某些功能性编程元素(Predicate,Function),但它们支持特定需求,其核心焦点不是为Java添加功能性编程元素(请参阅当前的详细冗长)。请参阅this issue了解一下。

0

我认为你没有一个确切的注入方法..但是你可以通过使用提供

Maps.transformValues(Map<K,V1> fromMap, Function<? super V1,V2> function) 
List.transform(List<F> fromList, Function<? super F,? extends T> function) 

的transformValues方法,当然,你需要一个Function类中定义专案获得类似的解决方案使用传入的注入参数:

class MyFunction<Type, Type> 
{ 
    static String variable; 

    Type apply(Type t) 
    { 
    //do whatever you want with t 
    // and storing intermediate result to variable 

    // return same t to make this function work like identity 
    return t; 
    } 

} 
+0

我认为你会变得更好编写你自己的Reducer接口和静态减少方法。这并不难,它至少可以让你的意图变得清晰而不是黑客。 – ColinD 2010-03-25 21:11:17

+0

这种说法毫无疑问是正确的,但也许用这种方式将它与*应该是*优化方法相结合。 – Jack 2010-03-25 21:22:09

相关问题