Usando Guava se podría crear una vista de la propiedad foo
de los objetos en el List
usando Lists.transform así:
public class Obj {
String foo;
String bar;
public static final Function<Obj, String> FOO = new Function<Obj, String>() {
public String apply(Obj input) {
return input.foo;
}
};
}
public void someMethod(List<Obj> objs) {
List<String> foos = Lists.transform(objs, Obj.FOO);
...
}
A diferencia de otras soluciones, esto es puramente una vista del List<Obj>
y como tal, no asigna un conjunto separado ArrayList
o algo así en la memoria y se puede crear en muy poco tiempo, independientemente del tamaño de su List<Obj>
. Además, si cambia el List<Obj>
original, la lista foos
reflejará ese cambio.
En Java 8 (debido en algún momento en 2012), esto se convertirá en mucho más fácil con las expresiones lambda y referencias de métodos. Usted será capaz de hacer algo como esto:
List<Obj> objs = ...
List<String> foos = objs.map(#Obj.getFoo);
Tienes Lista objs y desea crear una segunda lista de esa lista que contiene el atributo foo de todos los Obj de objs? –
Ralph