Java stream API: champ de carte sans syntaxe getter


class Person {
    public String name;
    public String getName() { return name; }
}

Existe-t-il du sucre de syntaxe spécial pour accéder aux champs dans l'API stream via lambda? Je vois:

List<Person> persons;
persons.stream().map(Person::getName).collect(Collectors.toList());
persons.stream().map(p -> p.name).collect(Collectors.toList());

Qu'en est-il de quelque chose comme (qui ne fonctionne pas, je le sais):

persons.stream().map(Person::name).collect(Collectors.toList());
Author: Holger, 2015-01-29

1 answers

Il n'y a pas de syntaxe de type référence de méthode pour l'accès aux champs. Cela aurait parfois été pratique s'il y en avait eu.

Le fait qu'il n'y en ait pas a une justification en ce sens qu'il est un peu étrange en Java de considérer les champs comme des méthodes. Cela créerait également des difficultés de surcharge car un champ et une méthode peuvent avoir le même nom.

Le travail consiste à fournir un getter pour le champ comme dans l'exemple que vous fournissez, ou à utiliser une expression lambda à la place.

 4
Author: Lii, 2018-08-30 13:00:37