代码之家  ›  专栏  ›  技术社区  ›  Ilak

在两个贴图上循环,并在另一个贴图中的一个贴图中查找替换关键点

  •  1
  • Ilak  · 技术社区  · 6 年前

    我有以下代码在两个集合上循环,并执行以下操作:

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

    我有两张地图:

    mapa:{“猫猫蝙蝠”,“45”} mapb:{“cat”“c”}

    上述代码将出现的cat替换为c。

    mapa:{“c c bat”,“45”}

    我想修改上面的代码,将mapa键拆分为两个字符串

    “c c”,“bat”

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

    方法1(“c c”、“bat”、“45”);

    我该怎么做?

    我认为使用带过滤器的谓词是一种方法,但我需要这方面的帮助。

    1 回复  |  直到 6 年前
        1
  •  1
  •   mark42inbound    6 年前

    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()