com.github.andyshao.util.RandomOperation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of Gear Show documentation
Show all versions of Gear Show documentation
Enhance and formating the coding of JDK
The newest version!
package com.github.andyshao.util;
import com.github.andyshao.lang.Convert;
import com.github.andyshao.util.function.FunctionOperation;
import com.github.andyshao.util.stream.Pair;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
/**
*
* Title:
* Descript:
* Copyright: Copryright(c) Oct 28, 2019
* Encoding: UNIX UTF-8
*
* @author Andy.Shao
*
*/
public final class RandomOperation {
private RandomOperation() {}
/**
* next bytes
* @param random {@link Random}
* @param minimum minimum byte (inclusive)
* @param lessThan less than byte (exclusive)
* @param size size
* @return byte stream
*/
public static Stream nextBytes(Random random, byte minimum, byte lessThan, long size) {
return StreamSupport.stream(new RandomByteSpliterator(random, 0, size, minimum, lessThan), false);
}
/**
* next bytes
* @param random {@link Random}
* @return byte {@link Stream}
*/
public static Stream nextBytes(Random random) {
return nextBytes(random, Byte.MIN_VALUE, Byte.MAX_VALUE, Long.MAX_VALUE);
}
/**
* next byte
* @return byte {@link Stream}
*/
public static Stream nextBytes() {
return nextBytes(new Random());
}
/**
* next byte
* @param random {@link Random}
* @return {@link com.github.andyshao.lang.PrimitiveType#BYTE}
*/
public static byte nextByte(Random random) {
byte[] bs = new byte[1];
random.nextBytes(bs);
return bs[0];
}
/**
* next byte
* @return {@link com.github.andyshao.lang.PrimitiveType#BYTE}
*/
public static byte nextByte() {
return nextByte(new Random());
}
/**
* next byte
* @param random {@link Random}
* @param minimum minimum byte (inclusive)
* @param lessThan less than byte (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#BYTE}
*/
public static byte nextByte(Random random, byte minimum, byte lessThan) {
return (byte) nextInt(random, minimum, lessThan);
}
/**
* next byte
* @param minimum minimum byte (inclusive)
* @param lessThan less than byte (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#BYTE}
*/
public static byte nextByte(byte minimum, byte lessThan) {
return nextByte(new Random(), minimum, lessThan);
}
/**
* next short
* @param random {@link Random}
* @param minimum minimum short (inclusive)
* @param lessThan less than short (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#SHORT}
*/
public static short nextShort(Random random, short minimum, short lessThan) {
return (short) nextInt(random, minimum, lessThan);
}
/**
* next short
* @param minimum minimum short (inclusive)
* @param lessThan less than short (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#SHORT}
*/
public static short nextShort(short minimum, short lessThan) {
return nextShort(new Random(), minimum, lessThan);
}
/**
* next short
* @param random #{@link Random}
* @return {@link com.github.andyshao.lang.PrimitiveType#SHORT}
*/
public static short nextShort(Random random) {
return nextShort(random, Short.MIN_VALUE, Short.MAX_VALUE);
}
/**
* next short
* @return {@link com.github.andyshao.lang.PrimitiveType#SHORT}
*/
public static short nextShort() {
return nextShort(new Random());
}
/**
* next short
* @param random {@link Random}
* @param minimum minimum short (inclusive)
* @param lessThan less than short (exclusive)
* @param size size number
* @return short {@link Stream}
*/
public static Stream nextShorts(Random random, short minimum, short lessThan, long size) {
return StreamSupport.stream(new RandomShortSpliterator(random, 0, size, minimum, lessThan), false);
}
/**
* next short
* @param random {@link Random}
* @return short {@link Stream}
*/
public static Stream nextShorts(Random random) {
return nextShorts(random, Short.MIN_VALUE, Short.MAX_VALUE, Long.MAX_VALUE);
}
/**
* next short
* @return short {@link Stream}
*/
public static Stream nextShorts() {
return nextShorts(new Random());
}
/**
* next char
* @param random {@link Random}
* @param minimum minimum char (inclusive)
* @param lessThan less than char (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#CHAR}
*/
public static char nextChar(Random random, char minimum, char lessThan) {
return (char) nextInt(random, minimum, lessThan);
}
/**
* next char
* @param minimum minimum char (inclusive)
* @param lessThan less than char (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#CHAR}
*/
public static char nextChar(char minimum, char lessThan) {
return nextChar(new Random(), minimum, lessThan);
}
/**
* next char
* @param random {@link Random}
* @return {@link com.github.andyshao.lang.PrimitiveType#CHAR}
*/
public static char nextChar(Random random) {
return nextChar(random, Character.MIN_VALUE, Character.MAX_VALUE);
}
/**
* next char
* @return {@link com.github.andyshao.lang.PrimitiveType#CHAR}
*/
public static char nextChar() {
return nextChar(new Random());
}
/**
* next char
* @param random {@link Random}
* @param minimum minimum char (inclusive)
* @param lessThan less than char (exclusive)
* @param size size number
* @return char {@link Stream}
*/
public static Stream nextChars(Random random, char minimum, char lessThan, long size) {
return StreamSupport.stream(new RandomCharSpliterator(random, 0, size, minimum, lessThan), false);
}
/**
* next char
* @param random {@link Random}
* @return char {@link Stream}
*/
public static Stream nextChars(Random random) {
return nextChars(random, Character.MIN_VALUE, Character.MAX_VALUE, Long.MAX_VALUE);
}
/**
* next char
* @return char {@link Stream}
*/
public static Stream nextChars() {
return nextChars(new Random());
}
/**
* next int
* @param random {@link Random}
* @param minimum minimum int (inclusive)
* @param lessThan less than int (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#INT}
*/
public static int nextInt(Random random, int minimum, int lessThan) {
if(lessThan <= minimum) throw new IllegalArgumentException("lessThan must greater than minimum");
int bound = lessThan - minimum;
return random.nextInt(bound) + minimum;
}
/**
* next int
* @param minimum minimum int (inclusive)
* @param lessThan less than int (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#INT}
*/
public static int nextInt(int minimum, int lessThan) {
return nextInt(new Random(), minimum, lessThan);
}
/**
* next long
* @param random {@link Random}
* @param minimum minimum long (inclusive)
* @param lessThan less than long (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#LONG}
*/
public static long nextLong(Random random, long minimum, long lessThan) {
if(lessThan <= minimum) throw new IllegalArgumentException("lessThan must greater than minimum");
if(lessThan <= (long) Integer.MAX_VALUE && lessThan >= (long) Integer.MIN_VALUE)
return nextInt(random, (int) minimum, (int) lessThan);
return random.longs(1, minimum, lessThan)
.findFirst()
.getAsLong();
}
/**
* next long
* @param minimum minimum long (inclusive)
* @param lessThan less than long (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#LONG}
*/
public static long nextLong(long minimum, long lessThan) {
return nextLong(new Random(), minimum, lessThan);
}
/**
* next double
* @param random {@link Random}
* @param minimum minimum double (inclusive)
* @param lessThan less than double (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#DOUBLE}
*/
public static double nextDouble(Random random, double minimum, double lessThan) {
if(lessThan <= minimum) throw new IllegalArgumentException("lessThan must greater than minimum");
return random.doubles(1, minimum, lessThan)
.findFirst()
.getAsDouble();
// return (random.nextDouble() * lessThan) + minimum;
}
/**
* next double
* @param minimum minimum double (inclusive)
* @param lessThan less than double (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#DOUBLE}
*/
public static double nextDouble(double minimum, double lessThan) {
return nextDouble(new Random(), minimum, lessThan);
}
/**
* next float
* @param random {@link Random}
* @param minimum minimum float (inclusive)
* @param lessThan less than float (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#FLOAT}
*/
public static float nextFloat(Random random, float minimum, float lessThan) {
if(lessThan <= minimum) throw new IllegalArgumentException("lessThan must greater than minimum");
float result = (random.nextFloat() * (lessThan - minimum)) + minimum;
if(result >= lessThan) result = Math.nextDown(lessThan);
return result;
// return (random.nextFloat() * lessThan) + minimum;
}
/**
* next float
* @param minimum minimum float (inclusive)
* @param lessThan less than float (exclusive)
* @return {@link com.github.andyshao.lang.PrimitiveType#FLOAT}
*/
public static float nextFloat(float minimum, float lessThan) {
return nextFloat(new Random(), minimum, lessThan);
}
/**
* next float
* @param random {@link Random}
* @param minimum minimum float (inclusive)
* @param maximum less than float (exclusive)
* @param size size number
* @return float {@link Stream}
*/
public static Stream nextFloats(Random random, float minimum, float maximum, long size) {
if(maximum < minimum) throw new IllegalArgumentException("maximum less than minimum");
return StreamSupport.stream(new RandomFloatSpliterator(random, 0, size, minimum, maximum), false);
}
/**
* next float
* @param random {@link Random}
* @return float {@link Stream}
*/
public static Stream nextFloats(Random random) {
return nextFloats(random, Float.MIN_VALUE, Float.MAX_VALUE, Long.MAX_VALUE);
}
/**
* chose by percent
* @param random {@link Random}
* @param percent percent number
* @return {@link com.github.andyshao.lang.PrimitiveType#DOUBLE}
*/
public static boolean choseByPercent(Random random, double percent) {
if(percent < 0 || percent > 100) throw new IllegalArgumentException("percent is greater than 100 or less than 0");
return (percent / 100.0) > random.nextDouble();
}
/**
* next by percent
* @param random {@link Random}
* @param percentages double mapper
* @return percent string
*/
public static Optional nextByPercent(Random random, Map percentages) {
Convert
© 2015 - 2025 Weber Informatics LLC | Privacy Policy