public class A {
private Collection bs;
/**
* @return a live concatenated view of the Ds contained in the Cs
* contained in the Bs contained in this A.
*/
public Iterable getDs() {
Iterable cs = Iterables.concat(Iterables.transform(bs, BToCsFunction.INSTANCE));
Iterable ds = Iterables.concat(Iterables.transform(cs, CToDsFunction.INSTANCE));
return ds;
}
private enum BToCsFunction implements Function> {
INSTANCE;
@Override
public Collection apply(B b) {
return b.getCs();
}
}
private enum CToDsFunction implements Function> {
INSTANCE;
@Override
public Collection apply(C c) {
return c.getDs();
}
}
}
public class B {
private Collection cs;
public Collection getCs() {
return cs;
}
}
public class C {
private Collection ds;
public Collection getDs() {
return ds;
}
}如果您的目标只是迭代Ds并且您不需要集合视图,那么这很有效。它避免了大型临时集合的实例化。