J'ai une carte avec un tableau comme valeurs. Maintenant, tout ce tableau doit être converti en liste. enfin, toute la liste doit être combinée en une seule liste.
Disponible maintenant,
List<Class1> result = new ArrayList<>(); //This above list to be as {c1, c2, c3, c4}
Maintenant, j'aime avoir le résultat comme suit.
XXX
Attendez-vous au code en java8
4 Réponses :
Vous pouvez parcourir la carte en utilisant le jeu d'entrées et pour chaque valeur (c.-à-d. tableau), vous pouvez utiliser Arrays.asList pour la convertir en liste et l'ajouter dans votre liste finale.
Map<String , Integer[]> hm = new HashMap<String,Integer[]>(); List<Integer> finalList = hm.values().parallelStream().flatMap(Arrays::stream).collect(Collectors.toList())
avec l'utilisation de flux parallèles, cela peut être fait comme ceci
Map<String , Integer[]> hm = new HashMap<String,Integer[]>(); List<Integer> finalList = new ArrayList<Integer>(); for(Entry<String, Integer[]> entry:hm.entrySet()) { finalList.addAll(Arrays.asList(entry.getValue())); }
Ceci est un exemple simple avec un tableau d'entiers. Vous pouvez vous référer à ceci et arriver à votre solution.
Vous devez aplatir vos tableaux internes dans le flux d'entrées:
List<Class1> result = master_map.values() .stream() .flatMap(Arrays::stream) //use flatMap to flatten nested stream .collect(Collectors.toList());
Et une autre variante simple de Java 8:
List<Class1> result = new ArrayList<>(); master_map.entrySet().stream().forEach(element -> { result.addAll(Arrays.asList(element.getValue())); });
Un autre exemple
List<Class1> x = new ArrayList<>(); master_map.forEach((k,v) -> x.addAll(Arrays.asList(v)));
vous devez avoir réalisé que vous n'avez vraiment pas besoin des clés k
là-bas, alors peut-être qu'une simple itération sur les valeurs permettrait de nettoyer cela?
Vous n'êtes pas vraiment sûr mais cherchiez-vous simplement
Arrays.asList (classArray)
?