J'ai une liste Je dois convertir cette liste d'identifiants, dans une liste de RNG pour chaque triche que j'ai été fournie avec l'ID pour. P> Par exemple, je pourrais avoir 3 astuces: p> et une liste d'identifiants de: p> Je devrais finir avec une liste finale de {1,1,2,3,1,2,1,1,2}, qui est la RNG de la triche 3, puis la RNG de triche 1, puis la RNG de triche 1 à nouveau, puis finalement la RNG de la triche 2 P> Si quelqu'un pouvait m'aider, il serait apprécié. Merci. P> J'ai essayé et j'ai échoué avec: p>
3 Réponses :
La Lambda que vous passez à En outre, je proposerais de convertir la liste des tricheurs vers une carte - qui simplifierait le code et réduirait la complexité de la recherche de O (n) à O (n) à (1). P> p> Flatmap code> doit renvoyer un flux code> code>, pas une liste
code>. Et vous devez gérer le cas où il n'y a pas d'élément de ce type dans le courant - même si vous êtes sûr qu'il y en a. Quelque chose comme ça devrait faire:
Une solution possible:
import java.util.List; import java.util.stream.Collectors; class Scratch { static class Cheat { int id; List<Integer> rng; public Cheat(int id, List<Integer> rng) { this.id = id; this.rng = rng; } } public static void main(String[] args) { List<Cheat> allCheats = List.of( new Cheat(1, List.of(1,2,3)), new Cheat(2, List.of(1,2)), new Cheat(3, List.of(1)) ); List<Integer> result = List.of(3, 1, 1, 2).stream() .flatMap(id -> allCheats.stream() .filter(cheat -> cheat.id == id) .findFirst().orElseThrow().rng.stream()) .collect(Collectors.toList()); System.out.println(result); } }
Remarque: ceci crée un flux à chaque fois pour le même ID code> itération
Allcheats code> qui peut être réduit par L'autre réponse . par exemple. Pour
1,1 code> dans l'entrée, il irait itérer le
Allcheats code> deux fois.
Vous pouvez atteindre cela avec les étapes suivantes:
Créez une carte de Itéréter sur le Cheatide code> à rnd
ID code> s associé: p>
Churetides code> fourni en entrée et obtenez les identifiants RNG correspondants de la carte à collecter en tant que sortie: p>
Pourriez-vous ajouter ce que vous avez essayé jusqu'à présent?