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?