收集集合中的对象的属性
在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方法或类似的东西......我不能......
使用番石榴,特别是功能界面:
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());
番石榴也有其他好处。
使用Apache Commons的BeanUtils和Collections:
Collection<Long> ids = CollectionUtils.collect(things,
new BeanToPropertyValueTransformer("id"));
在Groovy
你只需要这样做:
Set ids = things.collect{ aThing -> aThing.Id}
这会给你所有的Ids
在所有的事情Things
作为一个列表。
以下是关于Groovy的一些信息,以及与Java相比的一些差异
链接地址: http://www.djcxy.com/p/10067.html