Avec Java 8+, vous pouvez utiliser la fonction ints
méthode de Random
pour obtenir un IntStream
de valeurs aléatoires, alors distinct
y limit
pour réduire le flux à un certain nombre de valeurs aléatoires uniques.
ThreadLocalRandom.current().ints(0, 100).distinct().limit(5).forEach(System.out::println);
Random
a également des méthodes qui créent LongStream
et DoubleStream
si vous en avez besoin.
Si vous voulez tous (ou une grande quantité de nombres dans une plage dans un ordre aléatoire, il peut être plus efficace d'ajouter tous les nombres à une liste, de la mélanger, et de prendre les n premiers car l'exemple ci-dessus est actuellement mis en œuvre en générant des nombres aléatoires dans la plage demandée et en les passant par un ensemble (de manière similaire à La réponse de Rob Kielty ), ce qui peut nécessiter d'en générer beaucoup plus que la quantité passée à la limite car la probabilité de générer un nouveau numéro unique diminue avec chaque numéro trouvé. Voici un exemple de l'autre façon de procéder :
List<Integer> range = IntStream.range(0, 100).boxed()
.collect(Collectors.toCollection(ArrayList::new));
Collections.shuffle(range);
range.subList(0, 99).forEach(System.out::println);
5 votes
Vous pourriez créer un permutation aléatoire de la gamme
1..100
(il existe des algorithmes célèbres pour cela), mais arrêtez-vous après avoir déterminé le premiern
éléments.0 votes
Duplicata possible de Génération de nombres aléatoires dans une plage avec Java
0 votes
stackoverflow.com/questions/28990820/
0 votes
Cela pourrait être utile Générateur d'identité aléatoire unique