Зациклите 2 карты и найдите замену вхождений ключа с одной карты на другую карту - PullRequest
0 голосов
/ 01 мая 2018

У меня есть следующий код, который перебирает две коллекции и выполняет следующие действия:

     mapa.forEach((key, value) -> {

     key = Arrays.stream(key.split(" "))
                  .map(s -> mapb.getOrDefault(s.trim(),   s.trim()))
                  .collect(Collectors.joining(" "));

     });

У меня есть 2 карты:

mapa: {"кошка-кошка летучая мышь", "45"} mapb: {"cat" "c"}

приведенный выше код заменяет вхождения cat на c.

mapa: {"c c bat", "45"}

Я хочу изменить приведенный выше код, чтобы разделить ключ mapa на две строки

"c c", "летучая мышь"

и использовать 2 части ключа и соответствующее значение в качестве аргумента метода

method1 ("c c", "bat", "45");

Как мне это сделать?

Я думаю, использование предиката с фильтром - один из способов, но мне нужна помощь с этим.

1 Ответ

0 голосов
/ 01 мая 2018

llakk, у меня нет цели зацикливания этой карты, но только ради ответа на этот вопрос я могу добиться того, что вы описали с помощью следующего кода.

public void mapKeyConversion() {

    Map<String, String> mapa = new HashMap<>();
    Map<String, String> mapb = new HashMap<>();
    mapa.put("cat cat bat", "45");
    mapb.put("cat", "c");

    mapa.entrySet().stream().
            map(entry -> Arrays.stream((entry.getKey().concat(" " + entry.getValue())).split(" ")).
            map(s -> mapb.getOrDefault(s.trim(), s.trim())).
            collect(Collectors.joining(" "))
            ).forEach(s -> {
                String[] sarr = s.split(" ");
                method1(sarr[0] + " " + sarr[1], sarr[2], sarr[3]);
            });
}

public void method1(String arg1, String arg2, String arg3) {
    System.out.println(arg1 + " " + arg2 + " " + arg3);
}

Вывод:

c c bat 45

ПРИМЕЧАНИЕ : c c представляет собой одну строку. Это можно вывести из числа аргументов метода method1().

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