随着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();
}
});
或者你可以使用与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正宗开发商。
*冷却器*?有可能。更可读和易懂:几乎没有。在我们终于有lambda表达式(和方法句柄)之前,我们将不能写得比这更简洁。 –
@JoachimSauer在java中将会引入'lambdas'作为官方文档的一部分吗? –
@ ZagorulkinDmitry Java 8应该包括它。但是,再一次,它最初是为了Java 7:|而设计的 – amit