Java: возвращение случайного значения из заданного ключа в HashMap - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь создать метод, который будет возвращать случайное значение из списка строк в хэш-карте при заданном ключе.Вот мой код ниже.(в частности, посмотрите на метод "getRandomValue", так как он испытывает трудности).У меня вопрос: как мне найти ключ на карте и вернуть случайное значение из хэш-карты?

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class Values {
    private Map<String, List<String>> map;
    private static Random rand = new Random();

public void ValueStore() {
    this.map = new HashMap<String, List<String>>();
}

public boolean containsKey(String key) {
    if(map.containsKey(key)) {
        return true;
    } return false;

}

public void put(String key, List<String> value) {
    map = new HashMap<>();
    map.put(key, value);

}

public String getRandomValue(String key) {
    for (String key1 : map.keySet()) {
        if(map.containsKey(key)) {
        //not sure what to do here  
        }
    }
    return key;

}

}

1 Ответ

0 голосов
/ 02 марта 2019

Прежде всего создайте экземпляр java.util.Random как статическое конечное поле в вашем классе, так как ваш метод getRandomValue(String) будет нуждаться в его использовании при каждом вызове:

private static final Random RANDOM = new Random();

Теперьиспользуйте это в своем методе:

public String getRandomValue(String key) {
    List<String> list = map.get(key);
    if (list == null) {
        return null; // or throw an exception
    }
    int randomIndex = RANDOM.nextInt(list.length());
    return list.get(randomIndex);
}

Метод Random.nextInt(int x) вернет значение от нуля (включительно) до x (эксклюзив), что делает его идеальным для выбора случайного индекса (потому чтоИндексы списков и массивов всегда начинаются с нуля).

...