package base; import java.util.Collections; import java.util.List; import java.util.Random; import java.util.function.Function; import java.util.stream.Stream; /** * @author Georgiy Korneev (kgeorgiy@kgeorgiy.info) */ public final class ExtendedRandom { public static final String ENGLISH = "abcdefghijklmnopqrstuvwxyz"; public static final String RUSSIAN = "абвгдеежзийклмнопрстуфхцчшщъыьэюя"; public static final String GREEK = "αβγŋδεζηθικλμνξοπρτυφχψω"; @SuppressWarnings("StaticMethodOnlyUsedInOneClass") public static final String SPACES = " \t\n\u000B\u2029\f"; private final Random random; public ExtendedRandom(final Random random) { this.random = random; } public ExtendedRandom(final Class owner) { this(new Random(7912736473497634913L + owner.getName().hashCode())); } public String randomString(final String chars) { return randomChar(chars) + (random.nextBoolean() ? "" : randomString(chars)); } public char randomChar(final String chars) { return chars.charAt(nextInt(chars.length())); } public String randomString(final String chars, final int length) { final StringBuilder string = new StringBuilder(); for (int i = 0; i < length; i++) { string.append(randomChar(chars)); } return string.toString(); } public String randomString(final String chars, final int minLength, final int maxLength) { return randomString(chars, nextInt(minLength, maxLength)); } public boolean nextBoolean() { return random.nextBoolean(); } public int nextInt() { return random.nextInt(); } public int nextInt(final int min, final int max) { return nextInt(max - min + 1) + min; } public int nextInt(final int n) { return random.nextInt(n); } @SafeVarargs public final T randomItem(final T... items) { return items[nextInt(items.length)]; } public T randomItem(final List items) { return items.get(nextInt(items.size())); } public Random getRandom() { return random; } public List random(final int list, final Function generator) { return Stream.generate(() -> generator.apply(this)).limit(list).toList(); } public double nextDouble() { return random.nextDouble(); } public void shuffle(final List all) { Collections.shuffle(all, random); } }