java8 ThreadLocalRandom获取一个区间内的随机数,很实用

        在java里,要取一个随机数方法也有很多,例如Math类,Random类,ThreadLocalRandom类,SecureRandom类,今天借用ThreadLocalRandom类使用java8的语法,,写一个获取区间内的随机数的工具类。

大家要注意ThreadLocalRandom类生成的随机数是一个“伪随机数”,是可以被破译的,这种方式仅限于一些对随机数要求不高的场景,ThreadLocalRandom 多线程环境下推荐使用,更为高效,用来补充(取代Random)

另外随机数生成类:

Random 生成的依然是“伪随机数

SecureRandom : 密码学安全的伪随机数,对安全要求比较高的环境下使用,比如生成密码,代金券码等。

具体使用哪个类生成,大家可根据自己的使用场景选择,没有更好的,只有更合适的!

代码如下:

package com.test.random;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

/**
 * @author kevin
 */
public interface RandomUtil {

    static void main(String[] args) {
        for (; ; ) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(getRandomStringInRange(1, 9));
//            System.out.println(getRandomIntInRange(100, 999));
            System.out.println(getRandomIntRange(10, 15, Arrays.asList(12, 13)));
        }
    }

    /**
     * 获取闭区间内随机数返回int类型
     *
     * @param min 最小值
     * @param max 最大值
     * @return 随机数
     */
    static int getRandomIntInRange(int min, int max) {

        return ThreadLocalRandom.current().ints(min, (max + 1)).limit(1).findFirst().getAsInt();
    }

    /**
     * 获取闭区间内随机数返回string类型
     *
     * @param min 最小值
     * @param max 最大值
     * @return 随机数
     */
    static String getRandomStringInRange(int min, int max) {
        return String.valueOf(ThreadLocalRandom.current().ints(min, (max + 1)).limit(1).findFirst().getAsInt());
    }

    /**
     * 获取闭区间内并且排除集合{@param extList}里的随机数
     *
     * @param min     最小值
     * @param max     最大值
     * @param extList 需要排除的数值集合
     * @return 随机数
     */
    static int getRandomIntRange(int min, int max, List<Integer> extList) {
        return ThreadLocalRandom.current().ints(min, (max + 1)).filter((r) -> !extList.contains(r)).findFirst().getAsInt();
    }
}
 

猜你喜欢

转载自blog.csdn.net/kevin_mails/article/details/107013528