我有以下代码循环遍历两个集合并执行以下操作:
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");
我该怎么做?
我在想使用带过滤器的谓词是一种方法,但我需要帮助。
答案 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()
的参数数量推断出来。