循环遍历2个地图,并从另一个地图中的一个地图中查找替换出现的关键字

时间:2018-05-01 01:38:27

标签: java-8 hashmap

我有以下代码循环遍历两个集合并执行以下操作:

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

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

     });

我有2张地图:

mapa:{" cat cat bat"," 45"} mapb:{" cat" " C"}

上面的代码用c替换了cat的出现次数。

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

我想修改上面的代码,将mapa密钥分成两个字符串

" c c"," bat"

并使用键的2部分和相应的值作为方法的参数

方法1(" c c"," bat"," 45");

我该怎么做?

我在想使用带过滤器的谓词是一种方法,但我需要帮助。

1 个答案:

答案 0 :(得分:1)

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()的参数数量推断出来。