我有一组对象,它们都是相同的对象类型。在该类型中,有一个我想要访问的属性 - 在这种情况下,它是将它添加到以逗号分隔的列表中:
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。
答案 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()。是否存在地图以便您可以加入(地图)?