java - 从 map 中随机选择 n 个项目

标签 java list random arraylist hashmap

我试图从 HashMap 中随机生成“n”个项目,其中“n”由用户确定。

这是我到目前为止所拥有的:

public static void main(String []args){
    int numColors = 3;
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("White","FFFFFF");
    map.put("Blank","000000");
    map.put("Red","ED0A15");
    map.put("Green","06F76C");
    map.put("Blue","0689FF");
    map.put("Sky Blue","00C2FC");
    map.put("Light Blue","08F0FC");
    map.put("Silver","C0BFC5");
    map.put("Mint","ABD3CA");
    map.put("Off White","FFEFF0");
    map.put("Purple","736FFA");
    map.put("Lavendar","DEBEEF");
    map.put("Hot Pink","F5159A");
    map.put("Pink","DB39CC");
    map.put("Light Pink","F5C2E3");
    map.put("Blush","C95FA7");
    map.put("Orange","D4361B");
    map.put("Yellow","DEF231");
    map.put("Warm White","F3E4C3");
    map.put("Turquoise","01DCA4");

    List<String> valuesList = new ArrayList<String>(map.values());
    int randomIndex = new Random().nextInt(valuesList.size());
    String randomValue = valuesList.get(randomIndex);

    System.out.printf(randomValue);
}

它为我打印了我想要的 1 个随机颜色(以十六进制表示),但是我不确定如何/使用哪个循环来从 map 生成 3 个随机十六进制颜色。我将 numColors 声明为 3 只是为了尝试测试一下。

这是我最终的结果:

public static void main(String []args){
    int numColors = 3;
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("White","FFFFFF");
    map.put("Blank","000000");
    map.put("Red","ED0A15");
    map.put("Green","06F76C");
    map.put("Blue","0689FF");
    map.put("Sky Blue","00C2FC");
    map.put("Light Blue","08F0FC");
    map.put("Silver","C0BFC5");
    map.put("Mint","ABD3CA");
    map.put("Off White","FFEFF0");
    map.put("Purple","736FFA");
    map.put("Lavendar","DEBEEF");
    map.put("Hot Pink","F5159A");
    map.put("Pink","DB39CC");
    map.put("Light Pink","F5C2E3");
    map.put("Blush","C95FA7");
    map.put("Orange","D4361B");
    map.put("Yellow","DEF231");
    map.put("Warm White","F3E4C3");
    map.put("Turquoise","01DCA4");

    List<String> keys = new ArrayList<String>(map.keySet());
    Random rand = new Random();
    for (int i = 0; i < numColors; i++) {
        String key = keys.get(rand.nextInt(keys.size()));
        System.out.println(map.get(key));
        }

 }

最佳答案

一个简单的解决方案是使用Collections.shuffle(map)来打乱整个 map 。然后迭代它并选择前 n 个元素。

当然,如果 map 很大并且您只需要几个元素,那么这是没有意义的。

编辑:

当然,使用此解决方案,您不会得到任何重复的条目

关于java - 从 map 中随机选择 n 个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25167823/

相关文章:

java - 为什么 bigDecimal 的 scale() 方法在与 stripTrailingZeros() 方法结合时返回负值?

java - Arrays.asList() 无法正常工作?

list - 递归结果存储在 Prolog 的列表中

c - 这段代码如何生成100个随机数

javascript - 如何从 html 的其他部分在 var textarray 中输入文本?

Java 的 Random.nextInt() 产生介于什么和什么之间的数字?

java - MIUI 10.2 红米设备上的锁屏上无法设置壁纸

Java 使用 2 种不同的对象类型作为类中的字段

list - 如何按字符串对自定义类型进行排序

java - 格式化字符串解析