2013-05-20 19 views
3

如何编写一个类型安全的映射器/集合变换器?Java中的Typesafe map-reduce

class Bean { 
public int value; 
} 

List<Bean> beans = .. 

List<Integer> ints = Lib.map(beans, b => b.value); 

使用Apache共享的集合,它看起来是这样的:

Collection<Integer> ints = CollectionUtils.collect(beans, new Transformer() { 
     @Override 
     public Object transform(Object input) { 
      return null; //cast here, dereference etc. 
     } 
    }); 

但是,这不是类型安全

+0

你应该去这里 [1]:http://stackoverflow.com/questions/6682545/can-i-have-a-type-safe-map-that-either-contains-a-or-lista – SilentBomb

+0

你的代码几乎可以像Java 8一样编译。 – assylias

+0

我宁愿坚持使用随时可用的库 – Yanko

回答

6

检查番石榴的Lists类了:

public static <F,T> List<T> transform(List<F> fromList, 
        Function<? super F,? extends T> function) 

API docs here

+0

太棒了,比Apache好! – Yanko

+0

@Kent你可以像我在我的编辑中那样通过URI编码来修复带括号的URL(即用'%28'和'%29'代替),或者如果parens是平衡的,你可以使用这种语法:'[link文字](http://www.example.com/foo(酒吧))' – gustafc

+0

@gustafc thx,我在你的评论中尝试了后者的选择,它没有奏效。但我没有尝试第一个。谢谢! – Kent