3

思った以上に長いコードを書き続けなければならず、何度もやらなければなりません。

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);
4

3 に答える 3

5

それを行う組み込みのJava関数はありません¹。Guavas ' 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 - ARS で指摘されているように、Java 8 ラムダ式および改善されたコレクション API より前に組み込まれていません。いくつかのクールな例へのリンク: http://www.javabeat.net/2012/05/enhanced-collections-api-in-Java-8-supports-lambda-expressions/

于 2013-05-25T18:17:38.517 に答える