如何使所有哈希图的值小写?



我有一个Map<String,Map<String,String>>,我想在其中降低每个键和值的大小写。使用以下代码,我可以做到这一点,但我的数据结构发生了变化。我怎么可能解决这个问题?

for (Map.Entry<String, Map<String, String>> t : list.entrySet()) {
for (Map.Entry<String, String> e : t.getValue().entrySet()) {
lowerCaseList1.put(t.getKey().toLowerCase().trim(), lowerCaseList2.put(e.getValue().toLowerCase().trim(), e.getKey().toLowerCase().trim()));
}
}

要将Map<String,Map<String,String>>中的所有3个字符串转换为大写1,请创建一个新映射。

Map<String,Map<String,String>> input = Map.of("abc", Map.of("Def", "Ghi"),
"jkl", Map.of("MNO", "PQR", "stu", "vwx"));
Map<String,Map<String,String>> output = input.entrySet().stream()
.collect(Collectors.toMap(
e1 -> e1.getKey().toUpperCase(),
e1 -> e1.getValue().entrySet().stream().collect(Collectors.toMap(
e2 -> e2.getKey().toUpperCase(),
e2 -> e2.getValue().toUpperCase()))));
System.out.println(input);
System.out.println(output);

输出

{abc={Def=Ghi}, jkl={stu=vwx, MNO=PQR}}
{ABC={DEF=GHI}, JKL={STU=VWX, MNO=PQR}}

注意:如果有两个键在大写时变为相同,则代码将使用IllegalStateException: Duplicate key失败。

Map<String,Map<String,String>> input = Map.of("aaa", Map.of("bbb", "ccc", "Bbb", "Ccc"));

输出

java.lang.IllegalStateException: Duplicate key BBB (attempted merging values CCC and CCC)

1(问题最初要求大写,但后来改为要求小写。保持答案不变,因为这对于展示如何更改套管并不重要

除了@Andreas提供的优雅解决方案外,您还可以按如下方式进行:

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
public class Main {
public static void main(String[] args) {
Map<String, Map<String, String>> map = Map.of("Map1", Map.of("tEst1", "VALUE1", "test2", "VAlue2"), "MaP2",
Map.of("TEST3", "value3", "Test4", "Value4"));
System.out.println(map);
Map<String, Map<String, String>> tempOuter = new LinkedHashMap<String, Map<String, String>>();
Map<String, String> tempInner;
for (Entry<String, Map<String, String>> outerEntry : map.entrySet()) {
tempInner = new LinkedHashMap<String, String>();
for (Entry<String, String> innerEntry : outerEntry.getValue().entrySet()) {
tempInner.put(innerEntry.getKey().toLowerCase(), innerEntry.getValue().toLowerCase());
}
tempOuter.put(outerEntry.getKey().toLowerCase(), tempInner);
}
map = new LinkedHashMap<String, Map<String, String>>();
map.putAll(tempOuter);
System.out.println(map);
}
}

输出:

{Map1={test2=VAlue2, tEst1=VALUE1}, MaP2={TEST3=value3, Test4=Value4}}
{map1={test2=value2, test1=value1}, map2={test3=value3, test4=value4}}

最新更新