Java stream API: 映射字段没有 getter 语法
Java stream API: map field without getter syntax
class Person {
public String name;
public String getName() { return name; }
}
通过 lambda 访问流 API 中的字段是否有特殊的语法糖?我看到了:
List<Person> persons;
persons.stream().map(Person::getName).collect(Collectors.toList());
persons.stream().map(p -> p.name).collect(Collectors.toList());
像这样的东西怎么样(这不起作用,我知道):
persons.stream().map(Person::name).collect(Collectors.toList());
字段访问没有类似于方法引用的语法。有时那样会很方便。
动机
没有理由的事实是 Java 将字段视为方法有点奇怪。这也会给重载带来困难,因为字段和方法可以具有相同的名称。
解决方法
如问题文本中的示例所示,为字段提供 getter。或者改用 lambda 表达式。像这样:
someMethod(obj -> obj.someField);
class Person {
public String name;
public String getName() { return name; }
}
通过 lambda 访问流 API 中的字段是否有特殊的语法糖?我看到了:
List<Person> persons;
persons.stream().map(Person::getName).collect(Collectors.toList());
persons.stream().map(p -> p.name).collect(Collectors.toList());
像这样的东西怎么样(这不起作用,我知道):
persons.stream().map(Person::name).collect(Collectors.toList());
字段访问没有类似于方法引用的语法。有时那样会很方便。
动机
没有理由的事实是 Java 将字段视为方法有点奇怪。这也会给重载带来困难,因为字段和方法可以具有相同的名称。
解决方法
如问题文本中的示例所示,为字段提供 getter。或者改用 lambda 表达式。像这样:
someMethod(obj -> obj.someField);