在java8中是否有lambdas的默认变量占位符,比如_scala?
这是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)
Run Code Online (Sandbox Code Playgroud)
假设定义了一个Person类,这里是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());
Run Code Online (Sandbox Code Playgroud)
有没有办法在最后一行编写过滤器而不定义变量p.显然这不是一个大问题,但只是好奇.我也明白我可以在Person类中编写一个方法isTeenager并将其传递给lambda,但这也不是重点.只想知道java8中是否有lambdas的默认变量占位符.
没有,没有.您可以使用方法引用使其更接近; 为此,您将定义一个布尔方法isATeen(Person p),然后执行以下操作:
List<Person> teens = people.stream()
.filter(Person::isATeen)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
(假设您定义的方法是在Person中定义的.您可以在别处定义它.)
这样您就不必为Person过滤器中的实例显式创建名称.你当然会在这个方法中这样做,所以它并没有好多少.
更新:对于JEP 302, JDK 9中的第2阶段,下划线实际上已成为任何位置变量的非法名称.这样,未来的Java版本可以_用作lambdas的默认占位符,其方式与Scala等语言类似.或者他们可能使用不同或根本不使用它.我们得等一下.
| 归档时间: |
|
| 查看次数: |
2840 次 |
| 最近记录: |