我必须继续编写比自己想要的更长的代码,而且我必须做很多次。

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/

10-08 03:08