inferred - ¿Hay un marcador de posición variable predeterminado para las lambdas en java8?
lambda expressions java (2)
¿Hay un marcador de posición variable predeterminado para las lambdas en java8, como _
para scala?
Aquí está el ejemplo de Scala:
case class Person(name:String, age:Int)
val people = List(Person("Jack", 35), Person("Arjun", 16), Person("Sasha", 13), Person("Sara", 8))
val teens = people.filter(_.age >= 13).filter(_.age <= 19)
Asumiendo que hay una clase de persona definida, aquí está el ejemplo de Java:
List<Person> people = Arrays.asList(new Person("Jack", 35), new Person("Arjun", 16), new Person("Sasha", 13), new Person("Sara", 8));
List<Person> teens = people.stream()
.filter(p -> (p.getAge() >= 13 && p.getAge() <= 19))
.collect(Collectors.toList());
¿Hay una manera de escribir el filtro en la última línea sin definir la variable p
. Obviamente, esto no es un gran problema, pero es curioso. También entiendo que podría escribir un método en la clase Person como isTeenager
y pasarlo a lambda, pero ese tampoco es el punto. Solo quiero saber si hay un marcador de posición variable predeterminado para las lambdas en java8.
No hay, no. Podrías usar una referencia de método para hacerlo un poco más cerca; para eso definirías un método booleano isATeen(Person p)
y luego harías algo como esto:
List<Person> teens = people.stream()
.filter(Person::isATeen)
.collect(Collectors.toList());
(Suponiendo que haya definido el método está definido en Persona. Podría definirlo en otra parte).
De esa manera, no tiene que crear explícitamente un nombre para la instancia de Person
en el filtro. Por supuesto que lo haces en el método, así que no es mucho mejor.
ACTUALIZACIÓN: Con JEP 302, Fase 2 en JDK 9, el subrayado se ha convertido en un nombre ilegal para una variable en cualquier posición. De esa manera, las futuras versiones de Java pueden usar _
como un marcador de posición predeterminado para las lambdas de manera similar a lenguajes como Scala. O pueden usarlo de manera diferente o no usarlo. Tendremos que esperar un ver.
Se ha propuesto y rechazado :
los wunderbars fueron considerados y (abrumadoramente) rechazados por el EG.