使用GS Collections,您有几种方法可以做到这一点。您可以使用称为 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();
}
});
或者,您可以将 ArrayList 与 ListIterate 实用程序类一起使用。
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 的开发人员。