Как извлечь значения из вложенных карт с помощью лямбда-выражения?

#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