Не могу преобразовать список кортежей в hashmap java - PullRequest
0 голосов
/ 29 марта 2019

Я хочу преобразовать javax.persistence.Tuple в HashMap, но вот так он вставляет последний элемент кортежа и принимает также псевдоним и тип данных.Как я могу улучшить этот метод, чтобы он принимал значения кортежа?

public Map<String, Object> tuplesToMap(List<Tuple> data){
    Map<String, Object> values = new HashMap<>();
    data.forEach(tuple -> {
        tuple.getElements().forEach(
            element -> {
                values.put(element.getAlias(), tuple.get(element));
            }
        );
    });
    return values;
}

1 Ответ

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

element.getAlias(), который вы используете в качестве ключа для hashmap, вероятно, одинаков для некоторых элементов.

Map ключи уникальны, что означает, что если вы вставляете записи (1, "один"), а затем (1," два ") первое значение будет переопределено последним.Если вы хотите, чтобы несколько значений были сопоставлены одной клавише, используйте Map<String, Collection<Object>> или Multimap из Гуавы, что в точности то же самое.

Вы можете вставить в мультикарту эту функцию - если клавишаотсутствует на карте, создайте новый ArrayList и добавьте его на карту, в противном случае верните существующий.Затем вставьте значение в список:

values
    .computeIfAbsent(element.getAlias, k -> new ArrayList<>())
    .add(tuple.get(element));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...