收集集合中的对象的属性

在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

上一篇: Collect property of objects in collection

下一篇: finding contours displacement