我怎样才能最好地获得以下结构的所有“name”字符串元素:
class Foo {
List<Bar> bars;
}
class Bar {
private String name;
private int age;
}
我的方法是:
List<String> names = new ArrayList<String>();
for (Bar bar : foo.getBars()) {
names.add(bar.getName());
}
这可能有用,但在java中没有。Collections
我可以这样写:
Collections.getAll(foo.getBars(), "name");
?
答案 0 :(得分:3)
如果您使用Eclipse Collections并更改getBars()以返回MutableList或类似内容,您可以写:
MutableList<String> names = foo.getBars().collect(new Function<Bar, String>()
{
public String valueOf(Bar bar)
{
return bar.getName();
}
});
如果在Bar上将函数提取为常量,则会缩短为:
MutableList<String> names = foo.getBars().collect(Bar.TO_NAME);
使用Java 8 lambdas,根本不需要函数。
MutableList<String> names = foo.getBars().collect(Bar::getName);
如果无法更改getBars()的返回类型,可以将其包装在ListAdapter中。
MutableList<String> names = ListAdapter.adapt(foo.getBars()).collect(Bar.TO_NAME);
注意:我是Eclipse集合的提交者。
答案 1 :(得分:1)
有点提供Google番石榴
List<String> names = new ArrayList(Collections2.transform(foo.getBars(), new Function<Bar,String>() {
String apply(Bar bar) {
return bar.getName()
}
});
答案 2 :(得分:1)
使用Java 8:
UICollectionView
答案 3 :(得分:-1)
有没有理由不能使用Googles集合框架提供的MultiMap?
这将允许具有多个键值的地图。
所以你可以有一个重复的键(不像是一个hashmap)并返回该键的所有值
然后只需调用相关Map上的get,这与你想要的“getAll”示例的实现相同
获取
收集获取(@Nullable K key)返回与键关联的所有值的集合视图。如果multimap中没有映射 提供密钥后,将返回一个空集合。对返回的更改 集合将更新底层多图,反之亦然。
参数:key - 在multimap中搜索的键返回: 键映射到
的值的集合