在C#中,我可以这样做:
IEnumerable<long> ids = things.select(x => x.Id);
在Java中我必须这样做:
Collection<Long> ids = new ArrayList<Long>(things.size()); for(Thing x : things) ids.add(x.getId());
现在必须做很多这样的事情并且想知道在Java中是否有更通用的方法来做这件事.可以创建一个方法来做到这一点,但后来我将不得不添加一个getId方法的接口或类似的…我不能…
解决方法
使用
Guava,特别是
function interface:
public class ThingFunction implements Function<Thing,Long> { @Override public Long apply(Thing thing) { return user.getId(); } }
并且像这样调用(其中transform是来自guava的Collections2的静态导入:
Collection<Long> ids = transform(things,new ThingFunction());
番石榴也有相当多的other benefits.