#java-8
Вопрос:
Мне нужно извлечь внешнее преобразование из вложенной карты, используя лямбда-выражение java 8: я смог решить его с помощью старой школы java 8 для каждого, но хотел посмотреть, как это работает с лямбда-выражением java 8.
например, я хочу отфильтровать карты внутри карты .
для cmp1, fee1, Inr-Try мы имеем значение 31. какой желаемый результат
// camp1
Map<String,String> forexMap3_1 = new HashMap();
forexMap3_1.put("Eur-Try","11");
forexMap3_1.put("Usd-Try","21");
forexMap3_1.put("Inr-Try","31");
Map<String,String> forexMap3_2= new HashMap();
forexMap3_2.put("Eur-Try","12");
forexMap3_2.put("Usd-Try","22");
forexMap3_2.put("Inr-Try","32");
Map<String, Map> feeMap2 = new HashMap();
feeMap2.put("fee1", forexMap3_1);
feeMap2.put("fee2",forexMap3_2);
campaigns.put("cmp1", feeMap2);
// camp2
Map<String,String> forexMap3_3 = new HashMap();
forexMap3_3.put("Eur-Try","11");
forexMap3_3.put("Usd-Try","21");
forexMap3_3.put("Inr-Try","31");
Map<String,String> forexMap3_4= new HashMap();
forexMap3_4.put("Eur-Try","12");
forexMap3_4.put("Usd-Try","22");
forexMap3_4.put("Inr-Try","32");
Map<String, Map> feeMap3 = new HashMap();
feeMap3.put("fee3", forexMap3_3);
feeMap3.put("fee4",forexMap3_4);
campaigns.put("cmp2", feeMap3);
Комментарии:
1. в чем заключается ваш вопрос ? извините, мне это непонятно
2. я хочу выводить данные для cmp1, fee1, Inr-Старайтесь быть 31, здесь мы пытаемся зациклиться внутри цикла карт, чтобы получить правильную сумму на форекс.
3. Что такое
campaigns
?4. кампания[рекламная кампания] может иметь карту сборов, а сборы могут иметь карту курсов форекс.
5. Простым решением без lamda будет : System.out.println (((HashMap)кампании.get(кампания).get(плата)).get(форекс));
Ответ №1:
Попробуйте это :
out.entrySet().поток().фильтр(x->x.getKey().равно(ваш ключ)).flatMap(x->x.getValue().entrySet().stream()).collect(Collectors.toMap(x->>x.getKey(),x->>>x.getValue()));
Ответ №2:
просто повторите на детях кампании:
HashMap<String, String> finalMap = new HashMap<>();
campaigns.forEach((s, stringMapMap) -> stringMapMap.forEach((s1, map) -> finalMap.putAll(map)));
System.out.println(finalMap.get("Inr-Try")); // output: 31