我必须继续编写比自己想要的更长的代码,而且我必须做很多次。
Collection<MiClase> collection1 = new ArrayList<MiClase>;
Collection<String> collection2 = new ArrayList<String>;
// I currently do this
for (MiClase c : collection1){
collection2.add(c.nombre()); // nombre() returns String
}
有什么可以缩短的吗?
// I want something like
collection2.addAll(collection1, MiClase.nombre);
最佳答案
没有内置的Java函数可以做到这一点。您可以使用番石榴'Collections2#transform(collection, function)'
因此,您的代码看起来像
// nombres = collections2, miClasses = collection1
nombres.addAll(Collections2.transform(miClasses, new Function() {
@Override
public String apply (MiClasse miClasse) {
return miClasse.nombre();
}
}));
但这确实很麻烦,只是删除一个简单的循环可能就太过分了。
编辑
1-正如A.R.S.指出的那样,不是在Java 8 lambda表达式和改进的collection API之前内置的。带有一些很酷的例子的链接:http://www.javabeat.net/2012/05/enhanced-collections-api-in-java-8-supports-lambda-expressions/