Ich frage mich, ob IntStream
und Lambdas irgendwie schnell verwendet werden können (one-line) erstellen Sie ein Array mit einer zufälligen Teilmenge eines vorhandenen Array von Elementen.Schnelle Möglichkeit zum Erstellen einer zufälligen Teilmenge eines Arrays mit IntStream
Zum Beispiel sagen, dass ich einen Pool von Spielern haben:
Player[] allPlayers;
Und ich möchte eine zufällige Teilmenge dieser Spieler bekommen, die Dimension der erforderlichen Teilmenge gegeben. Traditionell würde ich so etwas wie tun:
List<Player> players = new ArrayList<Player>(Arrays.asList(allPlayers));
int subsetSize = 8;
Player[] subset = new Player[subsetSize];
for (int i = 0; i < subsetSize; i++) {
int randIndex = new Random().nextInt(players.size());
subset[i] = players[randIndex];
players.remove(randIndex);
}
return subset;
Aber kann dieser Prozess mit Java 8 Funktionen getan werden? Ich nehme an, es würde es verdichten, was ich versuche zu erreichen. Ich bekomme immer noch den Dreh raus mit diesen neuen Java 8 Features, wie IntStream
und Lambdas und ich würde nicht wissen, wie man sie für diesen speziellen Fall benutzt.
Obwohl das gut aussieht, finde ich diese Strategie suboptimal. Wenn die Größe beispielsweise 1000 ist und Sie eine Teilmenge von 999 Elementen haben möchten, müssen Sie eine ganze Menge zufälliger Ganzzahlen erzeugen, bis Sie eine solche finden, die noch nicht erzeugt wurde. Collections.shuffle hat dieses Problem nicht. Für eine kleine Untergruppe ist es wahrscheinlich schneller. –
Schön, genau das habe ich gesucht.Ich muss wirklich anfangen, das Potenzial von Lambda zu nutzen. Übrigens, würdest du gerne erklären, wie 'mapToObj' hier funktioniert? – dabadaba