All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.soento.core.util.RandomUtil Maven / Gradle / Ivy

package com.soento.core.util;

import com.soento.core.enums.DateFormat;

import java.util.*;

/**
 * 随机工具类
 *
 * @author yantao.zeng
 */
public final class RandomUtil {

    private RandomUtil() {
    }

    /**
     * 用于随机选的数字
     */
    private static final String BASE_NUMBER = "0123456789";
    /**
     * 用于随机选的字符
     */
    private static final String BASE_CHAR = "abcdefghijklmnopqrstuvwxyz";
    /**
     * 用于随机选的大写字符
     */
    private static final String BASE_UPPER_CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    /**
     * 用于随机选的字符和数字
     */
    private static final String BASE_CHAR_NUMBER = BASE_CHAR + BASE_NUMBER + BASE_UPPER_CHAR;

    /**
     * 获得指定范围内的随机数
     *
     * @param min 最小数
     * @param max 最大数
     * @return 随机数
     */
    public static int randomInt(int min, int max) {
        Random random = new Random();
        return random.nextInt(max - min) + min;
    }

    /**
     * 获得随机数
     *
     * @return 随机数
     */
    public static int randomInt() {
        Random random = new Random();
        return random.nextInt();
    }

    /**
     * 获得指定范围内的随机数 [0,limit)
     *
     * @param limit 限制随机数的范围,不包括这个数
     * @return 随机数
     */
    public static int randomInt(int limit) {
        Random random = new Random();
        return random.nextInt(limit);
    }

    /**
     * 随机bytes
     *
     * @param length 长度
     * @return bytes
     */
    public static byte[] randomBytes(int length) {
        Random random = new Random();
        byte[] bytes = new byte[length];
        random.nextBytes(bytes);
        return bytes;
    }

    /**
     * 随机获得列表中的元素
     *
     * @param   元素类型
     * @param list 列表
     * @return 随机元素
     */
    public static  T randomElement(List list) {
        return randomElement(list, list.size());
    }

    /**
     * 随机获得列表中的元素
     *
     * @param    元素类型
     * @param list  列表
     * @param limit 限制列表的前N项
     * @return 随机元素
     */
    public static  T randomElement(List list, int limit) {
        return list.get(randomInt(limit));
    }

    /**
     * 随机获得列表中的一定量元素
     *
     * @param    元素类型
     * @param list  列表
     * @param count 随机取出的个数
     * @return 随机元素
     */
    public static  List randomElements(List list, int count) {
        final List result = new ArrayList(count);
        int limit = list.size();
        while (--count > 0) {
            result.add(randomElement(list, limit));
        }

        return result;
    }

    /**
     * 随机获得列表中的一定量的不重复元素,返回Set
     *
     * @param         元素类型
     * @param collection 列表
     * @param count      随机取出的个数
     * @return 随机元素
     * @throws IllegalArgumentException 需要的长度大于给定集合非重复总数
     */
    public static  Set randomElementSet(Collection collection, int count) {
        ArrayList source = new ArrayList<>(new HashSet<>(collection));
        if (count > source.size()) {
            throw new IllegalArgumentException("Count is larger than collection distinct size !");
        }

        final HashSet result = new HashSet(count);
        int limit = collection.size();
        while (result.size() < count) {
            result.add(randomElement(source, limit));
        }

        return result;
    }

    /**
     * 获得一个随机的字符串(只包含数字和字符)
     *
     * @param length 字符串的长度
     * @return 随机字符串
     */
    public static String randomString(int length) {
        return randomString(BASE_CHAR_NUMBER, length);
    }

    /**
     * 获得一个只包含数字的字符串
     *
     * @param length 字符串的长度
     * @return 随机字符串
     */
    public static String randomNumbers(int length) {
        return randomString(BASE_NUMBER, length);
    }

    /**
     * 获得一个随机的字符串
     *
     * @param baseString 随机字符选取的样本
     * @param length     字符串的长度
     * @return 随机字符串
     */
    public static String randomString(String baseString, int length) {
        final Random random = new Random();
        final StringBuilder sb = new StringBuilder();

        if (length < 1) {
            length = 1;
        }
        int baseLength = baseString.length();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(baseLength);
            sb.append(baseString.charAt(number));
        }
        return sb.toString();
    }

    /**
     * @return UUID
     */
    public static String uuid() {
        return UUID.randomUUID().toString();
    }

    /**
     * @return 简化的UUID,去掉了横线
     */
    public static String simpleUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    public static String nextId() {
        String time = DateFormat.YYYYMMDDHHMISSMS.instance().format(new Date());
        return time + RandomUtil.simpleUUID();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy