Digamos que tengo un objeto de persona con propiedades como name , color de hair color y eye color . Tengo la siguiente matriz Person[] people que contiene instancias de objetos person.
Sé que puedo obtener la propiedad de name de uno de los objetos Person con
// create a new instance of Person Person george = new Person('george','brown','blue'); // <<< make a people array that contains the george instance here... >>> // access the name property String georgesName = people[0].name; Pero, ¿qué pasa si quiero acceder a la propiedad de name de todos sin usar índices? Por ejemplo, ¿para crear una matriz o una lista de solo nombres o colores de cabello? ¿Tengo que iterar manualmente a través de mi matriz de people ? ¿O hay algo interesante en Java como String[] peopleNames = people.name ?
Dos opciones:
Iteración
List<String> names = new ArrayList<>(); for (Person p : people) { names.add(p.name); }Corrientes
String[] names = Arrays.stream(people).map(p -> p.name).toArray(size -> new String[people.length]);java 8:
String[] names = Arrays.asStream(people).map(Person::getName).asArray(String[]::new);Está buscando una característica funcional en un lenguaje Java inicialmente solo imperativo. Como ya se mencionó en otras respuestas, desde Java 8, también tiene elementos funcionales (por ejemplo, transmisiones). Sin embargo, todavía no se recomienda su uso. Esta publicación de blog explica las desventajas de los flujos sobre los bucles (es decir, rendimiento, legibilidad, mantenibilidad).
Si está buscando un código funcional y seguro sin implicaciones tan importantes, pruebe Scala:
case class Person(name: String) val persons = Array(Person("george"), Person("michael"), Person("dexter")) val personNames = persons.map(_.name)La principal diferencia es que este código Scala es fácil de leer y tiene un rendimiento comparable al de un código Java que usa un bucle porque el código traducido de Scala a Java usa un bucle while internamente.