是否有Java数据结构在对象集合中返回一组特定属性?

时间:2012-05-10 12:13:46

标签: java collections

我有一组对象,它们都是相同的对象类型。在该类型中,有一个我想要访问的属性 - 在这种情况下,它是将它添加到以逗号分隔的列表中:

String sep = ", ";
List<Item> items = db.findItems();

for (Item item : items) 
{
    result.append(item.getDescription() + sep);
} //for

return result.substring(0, results.length - sep.length());

如果我可以直接从集合中的所有对象访问该属性,那么我可以调用Google Guava的Joiner函数:

return Joiner.on(", ").join(/*Description attribute collection here*/);

我想到的结构类似于2D数组,其中每列代表一个属性,每行代表一个对象,所以我希望能够调用返回对象的特定行或特定列(attribute)返回所有对象的属性集合。

Java或一个好的第三方是否有这样的数据结构,还是我需要创建自己的数据?

干杯,

Alexei Blue。

4 个答案:

答案 0 :(得分:5)

为什么不最充分地使用谷歌的番石榴?

Joiner.on(",").join(Collections2.transform(items, new Function<Item, String>() {
    public String apply(Item input) {
        return item.getDescription();
    }
}));

答案 1 :(得分:2)

您可以编写一个内部Iterable子类,它可以到达集合中的每个对象并发出正确的属性。看到@Hiery的回复,他更快地得到了代码......

答案 2 :(得分:2)

很快在JDK 8中使用lambda表达式和方法引用

List<Jedi> jedis = asList(new Jedi("Obiwan",80), new Jedi("Luke", 35));
List<String> jediNames = jedis.map(Jedi::getName).into(new ArrayList<>()); //with metdod ref
Iterable<Integer> jediAges = jedis.map(j -> j.getAge()); //with lambdas

根据您的操作,您甚至可以使用链接中提供的JDK 8预览。

或者,库Lambdaj提供了一种方法。

答案 3 :(得分:0)

愚蠢,但我会选择Item.toString()。是否存在地图以便您可以加入(地图)?