Объединить два списка типа Long и добавить к существующей карте в Java 8 - PullRequest
0 голосов
/ 28 августа 2018

У меня есть два списка типа Long, скажем ListA и ListB.

Я хочу объединить их в Map<Long, Long>, чтобы ListA стало ключом, а ListB стало значением. Здесь выгода заключается в том, что я хочу добавить эти пары ключ-значение к существующей карте.

Я знаю, как анализировать списки и возвращать новый объект карты (используя Collectors.toMap). Моя проблема, чтобы добавить к существующей карте, может быть что-то вроде:

Map<Long, Long> map = new HashMap<Long, Long>;
// ... entries added to map
ListA.stream().forEach(a -> {
    map.put(a, <get 0th element of ListB somehow>);
});

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Предположим, что эти списки имеют одинаковый размер:

 Map<Long, Long> map = IntStream.range(0, listA.size())
          .boxed()
          .collect(Collectors.toMap(listA::get, listB::get));


yourOtherMap.putAll(map);
0 голосов
/ 28 августа 2018

Попробуйте эту опцию:

Map<Long, Long> map = new HashMap<>();
IntStream.range(0, ListA.size())
    .forEach(i -> {
        map.put(ListA.get(i), ListB.get(i));
    });

Демо

Но, честно говоря, я не вижу ничего плохого в использовании обычного расширенного цикла for до Java 8:

// assuming both lists have the same size
for (int i=0; i < ListA.size(); ++i) {
    map.put(ListA.get(i), ListB.get(i);
}

Он лаконичен, прост для чтения и обслуживания, и никому не повредит, просматривая ваш код.

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