45 votes

Comment puis-je appeler une méthode sur chaque élément d'une liste ?

Supposons que j'ai une liste de voitures :

 public class Car {
    private String brand;
    private String name;
    private String color;

    public Car() { // ...  }

    public getName() { return name; }
    // ...
}

 // Suppose that I have already init the list of car
List<Car> cars = //...
List<String> names = new ArrayList<String>();


for (Car c : cars ) {
    names.add(c.getName());
}

Comment puis-je raccourcir le code ci-dessus ? En un mot, comment puis-je appeler une méthode sur chaque élément d'une liste ?

Par exemple, en Python :

 [car.name for car in cars]

2voto

hvgotcodes Points 55375

à part se débarrasser des accolades et/ou déplacer tout le code sur une seule ligne, ce qui n'est peut-être pas une bonne idée, vous ne pouvez pas.

1voto

Ben Janus Points 19

Dans common-lisp, il existe une fonction mapcar (cela n'a rien à voir avec l'exemple de voiture ci-dessus). Une fonction mapcar générale en Java :

 static <LIST_TYPE, ELEM_TYPE> List<LIST_TYPE> mapcar(Collection<ELEM_TYPE> list, Function<ELEM_TYPE, LIST_TYPE> function)
{
    return list.stream().map(function).collect(Collectors.toList());
}

Pour l'exemple de voiture :

 List<String> carNames = mapcar(cars, car -> car.getName());

0voto

Marek Puchalski Points 87

Si vous êtes bloqué et devez toujours utiliser Apache Commons, la classe Transformer peut vous être utile : http://apachecommonstipsandtricks.blogspot.de/2009/01/examples-of-functors-transformers.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X