Say I have a person object with properties such as name
, hair color
, and eye color
. I have the following array Person[] people
java 8:
String[] names = Arrays.asStream(people).map(Person::getName).asArray(String[]::new);
You are seeking a functional feature in an initially imperative-only language Java. As already mentioned in other answers, since Java 8, you also have functional elements (e.g., streams). However, they are not yet recommended to be used. This blog post explains the disadvantages of streams over loops (i.e., performance, readability, maintainability).
If you are looking for functional and safe code without such major implications, try Scala:
case class Person(name: String)
val persons = Array(Person("george"), Person("michael"), Person("dexter"))
val personNames = persons.map(_.name)
The main difference is that this Scala code is simple to read and it is comparably performant as a Java code that uses a loop because the translated Scala-to-Java code uses a while loop internally.
Two options:
Iteration
List<String> names = new ArrayList<>();
for (Person p : people) {
names.add(p.name);
}
Streams
String[] names = Arrays.stream(people).map(p -> p.name).toArray(size -> new String[people.length]);