gpt4 book ai didi

java - 过滤 HashMap 时输出不正确

转载 作者:行者123 更新时间:2023-12-01 17:50:43 24 4
gpt4 key购买 nike

我有一个 HashMap ,其中键和值都在字符串中。数据的格式为(table1, "table1:ssn1,ssn2,ssn3")。 key 中的表名是源表名,value 中的表名是目标表名以及相应的源系统名称,以“:”分隔。我试图从命令行传递参数中的源系统名称,以过滤出键和值以及接收到的源系统名称。到目前为止我想出了以下代码:

public class FilterKeyValues {

public static void main(String[] args) {
String[] valArr;
String ky;
Map<String, String> hmap = new HashMap<String, String>();
Map<String, String> filtered = new HashMap<String, String>();

hmap.put("Table1", "Table1:SSN1,SSN2,SSN3,SSN4,SSN5");
hmap.put("Table2", "Table2:SSN1,SSN4,SSN2,SSN5,SSN8,SSN9,SSN10");
hmap.put("Table3", "Table3:SSN4,SSN1");
hmap.put("Table4", "Table4:SSN5,SSN6,SSN7");
hmap.put("Table5", "Table5:SSN8,SSN1,SSN5,SSN2");

if(args.length > 0) {
for(String ssname: args) {
for (Entry<String, String> entry : hmap.entrySet()) {
if (entry.getValue().contains(ssname)) {
ky = entry.getKey();
valArr = entry.getValue().split(":");
filtered.put(ky, valArr[0]+":"+ssname);
}
}
}
}

for (String iter: filtered.keySet()){
String key = iter.toString();
String value = filtered.get(key).toString();
System.out.println(key + "->" + value);
}

}
}

在参数中,我在参数中传递:SSN1 SSN2。输出应该是

Table1->Table1:SSN1
Table2->Table2:SSN1
Table3->Table3:SSN1
Table5->Table5:SSN1
Table1->Table1:SSN2
Table2->Table2:SSN2
Table5->Table5:SSN2

相反,我得到的输出是:

Table2->Table2:SSN2
Table3->Table3:SSN1
Table5->Table5:SSN2
Table1->Table1:SSN2

谁能让我知道我在这里犯了什么错误?

最佳答案

您正在尝试将多个值放入 Map 中使用相同的 key 。对于每个键,映射只能保存一个值。

因此,最终只有您为任何给定键添加的最后一个值才会可见。

一般来说,您的代码表明字符串不是您数据的正确数据类型,您应该以更结构化的形式存储它(例如 Map<String,List<String>> )。

关于java - 过滤 HashMap 时输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50485993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com