Hashmap возвращает значение другими ключами hashmap - PullRequest
0 голосов
/ 16 мая 2019

У меня есть две хеш-карты, одна из которых содержит ключи, а другая содержит ключ со значением объекта.

Вот две мои карты и их значение

1-й:

newProdList = [18 =, 2 =, 21 = 1099887, 5 =, 22 = 1099888, 7 =, 14 =]

и 2-й:

oldList = [2 = Stock [location = AAQ-08-2, stockQty = 150, productCode = null, productName = Мужские кроссовки Emergence, разделение = обувь, категория = бег], 3 = сток [местоположение = AAR-01-1, stockQty = 192, productCode = 19234402, productName = Мужские кроссовки 19234402, подразделение = обувь, категория = бег], 4 = сток [location = BAN-08-1, stockQty = 190, productCode = 19108206, productName = Carson 2 New Core Мужские кроссовки, подразделение = Обувь, категория = работает], 21 = сток [местоположение = BAN-08-1, stockQty = 190, productCode = 19108206, productName = Carson 2 New Core Мужская Бег Обувь, дивизия = Обувь, категория = Бег]]

Я хочу перебрать newProductList и использовать там ключи в oldList, которые генерируют список объектов.

Это просто делается так:

List<Stock> stocks = new ArrayList<>(); 
for(Entry<?, ?> e: newProductList.entrySet()){
   Stock s = (Stock) oldProdList.get(e.getKey());
   stocks.add(s);
}

System.out.println(stocks);

Но я хочу использовать Stream api.

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Поскольку вы используете только ключи newProductList, я бы предложил вместо этого перебрать keySet().

Затем вы могли бы сделать что-то вроде этого:

List<Stock> stocks = newProductList.keySet().stream() //stream over the keys
                        .map(oldProdList::get) //map by calling get() on the old list
                        .filter(Objects::nonNull) //remove nulls
                        .collect(Collectors.toList()); //build the result list

Здесь мы перебираем ключи, сопоставляем их с помощью поиска, фильтруем ненулевые результаты (в случае сбоя поиска)и собери результат.

0 голосов
/ 16 мая 2019

Выполните итерацию по entrySet, чтобы получить соответствующий ключ из newProdList в oldList и установить значение из этой записи из oldList в newProdList.

Подробнее о карте Запись

Map<String,String> newProdList = new HashMap<>();
newProdList.put("18", null);
newProdList.put("2", null);
newProdList.put("21", "1099887");
newProdList.put("5", null);
newProdList.put("22", "1099888");
newProdList.put("7", null);
newProdList.put("14", null);
Map<String,String> oldList = new HashMap<>();
oldList.put("2", "Stock [location=AAQ-08-2, stockQty=150, productCode=null, productName=Emergence Men's Running Shoes, division=Shoes, category=Running]");
oldList.put("3", "Stock [location=AAR-01-1, stockQty=192, productCode=19234402, productName=Men's Running Shoes 19234402, division=Shoes, category=Running]");
oldList.put("4", "Stock [location=BAN-08-1, stockQty=190, productCode=19108206, productName=Carson 2 New Core Men?s Running Shoes, division=Shoes, category=Running]");
oldList.put("21", "Stock [location=BAN-08-1, stockQty=190, productCode=19108206, productName=Carson 2 New Core Men?s Running Shoes, division=Shoes, category=Running]");
newProdList.entrySet().stream().forEach(e -> e.setValue(oldList.get(e.getKey())));

Дополнительные пояснения к этой симпатичной схеме, как и требовалось.

map

...