3 votes

Convertir une Liste<SomeObject> en Liste<AnotherObject> en java 8

J'essaie de convertir une liste d'objets en une autre liste d'objets. Mais j'essaie de choisir la meilleure façon d'utiliser avec ou sans flux par la méthode java8 avec plus de lisibilité.

Disons que j'ai une liste comme ci-dessous :

List<SomeObject> list = new ArrayList<SomeObject>;

SomeObject :

public class SomeObject{
  private String var1;
  private String var2;
  private String var3;
  private String var4;
  //getters and setters
}

Un autre objet :

public class AnotherObject{
  private String var1;
  private List<String> var2;
  //getters and setters
}

Mais dans un autre objet, si la var1 est la même pour plusieurs objets, je veux sauvegarder la valeur de la var2 dans une liste de String, par exemple ci-dessous :

SomeObject so = new SomeObject();
so.setVar1("key1");
so.setVar2("value1");
SomeObject so1 = new SomeObject();
so1.setVar1("key2");
so1.setVar2("value2"); 
SomeObject so2 = new SomeObject();
so2.setVar1("key2");
so2.setVar2("value3");    
list.add(so);
list.add(so1);
list.add(so2);

Maintenant, à partir de la liste ci-dessus, je veux créer une liste d'AnotherObject qui a juste var1 et var2 et si var1 est la même dans deux SoemObjects, je veux les valeurs de var2 dans la liste et les sauvegarder pour var1.

Toute suggestion est appréciée et utile.

2voto

nullpointer Points 1135

Vous semblez chercher groupingBy sur la base de var1 et ensuite mapping a var2 comme une liste de valeurs. Cela pourrait être fait comme :

List<AnotherObject> anotherList = list.stream()
        .collect(Collectors.groupingBy(
                SomeObject::getVar1, Collectors.mapping(
                        SomeObject::getVar2, Collectors.toList())))
        .entrySet().stream()
        .map(e -> new AnotherObject(e.getKey(), e.getValue()))
        .collect(Collectors.toList());

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