Java8 ThreadLocalRandom obtém um número aleatório em um intervalo, o que é muito prático

        Em Java, há muitas maneiras de obter um número aleatório, como classe Math, classe Random, classe ThreadLocalRandom, classe SecureRandom. Hoje, pegamos emprestada a classe ThreadLocalRandom e usamos a gramática de java8 para escrever uma classe de ferramenta para obter números aleatórios no intervalo.

Todos devem notar que o número aleatório gerado pela classe ThreadLocalRandom é um "número pseudoaleatório" que pode ser decifrado. Este método é limitado a alguns cenários que não requerem números aleatórios altos. ThreadLocalRandom é recomendado em um ambiente multi-threaded, que é mais eficiente. Usado para complementar (substituir Random)

Outra classe de geração de número aleatório:

Random ainda gera "números pseudo-aleatórios

 

SecureRandom: números pseudo-aleatórios criptograficamente seguros, usados ​​em ambientes com altos requisitos de segurança, como geração de senhas, códigos de voucher, etc.

 

Você pode escolher qual classe usar especificamente de acordo com seus próprios cenários de uso. Não há melhor, apenas mais adequado!

 

 

código mostrado abaixo:

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();
    }
}

 

 

Acho que você gosta

Origin blog.csdn.net/kevin_mails/article/details/107013528
Recomendado
Clasificación