Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一个Java数据结构可以返回对象集合中的一组特定属性?_Java_Collections - Fatal编程技术网

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

是否有一个Java数据结构可以返回对象集合中的一组特定属性?,java,collections,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 - se

我有一组对象,它们都是相同的对象类型。在该类型中,有一个我想要访问的属性——在本例中,是将其添加到逗号分隔的列表中:

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());
我所考虑的这种结构就像一个2D数组,其中每列代表一个属性,每行代表一个对象,因此我希望能够调用返回对象的特定行或返回所有对象属性集合的特定列(属性)

Java或优秀的第三方是否有这样的数据结构,或者我是否需要创建自己的数据结构

干杯


Alexei Blue。

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

愚蠢,但我会选择Item.toString()。难道没有地图可以让你加入(地图)吗?

那么你为什么不充分利用谷歌的番石榴呢

Joiner.on(",").join(Collections2.transform(items, new Function<Item, String>() {
    public String apply(Item input) {
        return item.getDescription();
    }
}));
Joiner.on(“,”).join(Collections2.transform(items,newfunction)(){
公共字符串应用(项目输入){
return item.getDescription();
}
}));
即将加入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
List绝地=asList(新绝地(“奥比旺”,80岁),新绝地(“卢克”,35岁));
列出jediNames=jedis.map(Jedi::getName).into(new ArrayList())//与metdod ref
Iterable jediAges=jedis.map(j->j.getAge())//和兰博达斯
根据您正在做的事情,您甚至可以使用链接中提供的JDK 8预览


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

返回类型void是否应该不同?(在本例中为字符串)谢谢Hiery和@andersoj:)一些看起来很时髦的代码,但效果很好。我不认为连接函数需要一个映射,我认为它需要一个集合或一个iterable。太棒了,有点像C。我需要先说服一些高层从JDK 6升级,但我相信我能做到。^为edalorzo干杯,肯定要研究Java8@AlexeiBlue祝你成功说服这些西装:-)与此同时,你可能想看看Brian Goetz解释其工作原理的地方。预览版仍然缺少一些功能,但功能相当强大。不适用于生产环境,显然这是出于评估目的;-)
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