GS コレクションでは、これを行う方法がいくつかあります。FastList と呼ばれる ArrayList のドロップイン置換を使用できます。
MutableList<Baby> babies = FastList.newList();
/* some code adding a bunch of babies to the fastlist */
MutableList<String> names = babies.collect(new Function<Baby, String>() {
public String valueOf(Baby baby) {
return baby.getName();
}
});
または、ListIterate ユーティリティ クラスで ArrayList を使用できます。
ArrayList<Baby> babies = new ArrayList<Baby>();
/* some code adding a bunch of babies to the arraylist */
List<String> names = ListIterate.collect(babies, new Function<Baby, String>() {
public String valueOf(Baby baby) {
return baby.getName();
}
});
結果の順序は気にしないが、重複を許可したい場合は、代わりに Bag を使用できます。
MutableList<Baby> babies = FastList.newList();
/* some code adding a bunch of babies to the fastlist */
MutableBag<String> names = babies.collect(new Function<Baby, String>() {
public String valueOf(Baby baby) {
return baby.getName();
}
}, HashBag.<String>newBag());
int numberOfBabiesNamedXYZ = names.occurrencesOf("XYZ");
この関数を何度も使用している場合は、Baby クラスに定数として配置することをお勧めします。
注: 私は GS Collections の開発者です。