Ha sh сопоставление ключей с нулевым значением при использовании l oop для заполнения ключа массивом - PullRequest
0 голосов
/ 27 марта 2020
    List<LineOfBusiness> lobArray = new ArrayList<>();
    Map<String,String> params = new LinkedHashMap<>();

    List<String> scoreValues = Stream.of(StandardizedScore.values())
            .filter(o -> !o.getExpectedAction().trim().isEmpty())
            .map(o -> String.format("%s,%s,%s", o.getClaimScore(), o.getNetworkScore(), o.getExpectedAction()))
            .collect(Collectors.toList());

    for (LineOfBusiness lob : LineOfBusiness.values()) {
        lobArray.add(lob);
    }

    for (int i = 0; i < lobArray.size(); i++){
        for (int j = 0; j < scoreValues.size(); j++) {
            System.out.println(params.put(lobArray.get(i).toString(), scoreValues.get(j)));
        }
    }

Когда я пытаюсь заполнить HashMap значением params.put(lobArray.get(i), scoreValues.get(j)), ключи возвращаются как нулевые. Список определенно заполняется, поскольку значения печатаются правильно, когда я печатаю их в l oop, используя System.out.println(lobArray.get(i));. Я попытался отладить код, и он тоже забирает значения из списка.

Что-то идет не так, когда я добавляю значения lobArray в качестве ключа в HashMap. Если бы кто-нибудь мог определить, что происходит не так, я был бы очень благодарен.

1 Ответ

3 голосов
/ 27 марта 2020

Вы правильно вводите значения в вашу карту. Это просто вопрос печати. Вы должны печатать содержимое вашей карты только после того, как вы вставили свои значения в карту.

Вот что я имею в виду:

for (int i = 0; i < lobArray.size(); i++){
   for (int j = 0; j < scoreValues.size(); j++) {
       params.put(lobArray.get(i).toString(), scoreValues.get(j));
   }
}

System.out.println(params);

Или, если хотите чтобы перебрать записи на карте, используйте entrySet и сделайте это следующим образом:

for (Map.Entry<String, String> param : params.entrySet()) {
   System.out.println(param);
}

Теперь причина, по которой вы получаете null в своем коде. Согласно Map javado c, метод put возвращает:

предыдущее значение, связанное с ключом, или ноль, если не было сопоставления для ключа. (Нулевой возврат также может указывать на то, что карта ранее ассоциировала null с ключом, если реализация поддерживает нулевые значения.)

У вас не было никакого значения, связанного с вашим ключом ранее, поэтому null напечатано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...