gpt4 book ai didi

java - 树形图条目转换为字符串类型失败

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

我有两个集合,其中键和值都是字符串。我需要对集​​合进行排序,因此我决定使用“TreeMap”来保持排序。

我想要:

1)分别打印出两个集合,'garList'和'noGarList';

2) 将第一个集合的每个元素与第二个集合的每个元素进行比较;

3) 从第一个集合 ('garList') 中删除出现在第二个集合 ('noGarList') 中的那些元素。

我编写了以下代码来完成这 3 项任务:

public class TryTask_A_copy {

public static void main(String[] args) {

// First collection:
TreeMap<String, String> garList = new TreeMap<>();
// Second collection:
TreeMap<String, String> noGarList = new TreeMap<>();

// Fill the "Properties" obj for 'Gar':
garList.put("Gar_1", "rotura de lunas");
garList.put("Gar_2", "arbitraje de ley");
garList.put("Gar_3", "Adaptación del hogar");

// Fill the "Properties" obj for 'noGar':
noGarList.put("noGar_1", "rotura de lunas");
noGarList.put("noGar_2", "reembolso total");
noGarList.put("noGar_3", "Adaptación del coche");

// Get a set of the entries:
Set garSet = garList.entrySet();
Set noGarSet = noGarList.entrySet();

// Def strings needed for the comparison:
String strGar;
String strNoGar;

// Get an iterator:
Iterator i_gar = garSet.iterator();
Iterator i_noGar = noGarSet.iterator();

// Display 'Gar' elements:
while(i_gar.hasNext()){
String me_Gar = (String)i_gar.next(); // Exception in thread "main" java.lang.ClassCastException: java.util.TreeMap$Entry cannot be cast to java.lang.String
strGar = (String) i_gar.next();
System.out.println(strGar + " : " + garList.get(strGar) + ".");
}
System.out.println();

// Display 'noGar' elements:
while(i_noGar.hasNext()){
String me_noGar = (String)i_noGar.next();
strNoGar = (String) i_noGar.next();
System.out.println(strNoGar + " : " + garList.get(strNoGar) + ".");
}

// Get new iterators:
Iterator itr_gar = garSet.iterator();
Iterator itr_noGar = noGarSet.iterator();

// Compare elements from 'Gar' list with elements from 'noGar' list
// and remove those elements from 'Gar' list that appear in 'noGar' list as well:
while(itr_gar.hasNext()){
strGar = (String) itr_gar.next();
while(itr_noGar.hasNext()){
String str1 = garList.get(strGar);
strNoGar = (String) itr_noGar.next();
String str2 = noGarList.get(strNoGar);
boolean result = str1.equalsIgnoreCase(str2);
System.out.println(strGar + " : " + str1 + ".");
System.out.println(strNoGar + " : " + str2 + ".");
System.out.println(result);
System.out.println();
// if an element appears in both lists, then remove this element from "Gar" list:
if(result != true){
} else {
Object garList_new = garList.remove(strGar);
System.out.println("Removed element: " + garList_new);
System.out.println();
}
}
itr_noGar = noGarSet.iterator();
}
}

}

但我得到:

Exception in thread "main" java.lang.ClassCastException: java.util.TreeMap$Entry cannot be cast to java.lang.String" at line 51 (see comments).

我知道我的两个 TreeMap 对象的元素是“Map Entry”类型,无法转换为“String”类型,对吗?

但是我怎样才能获得一个键和值都是字符串的有序集合呢?

编写类似 garSet.removeAll(noGarSet) 的内容是行不通的,因为这意味着键和值一致。但就我而言,我两个集合中的一些值一致,但具有不同的键

所以我需要一个解决以下问题的解决方案:有一个有序集合,其中键和值都是字符串,并且可以比较和删除值

你能帮我解决这个问题吗?

最佳答案

我有点不清楚你想要实现的目标,但如果你想基于键删除,那么只需执行以下操作:

garSet.removeAll(noGarSet);

一般来说,您的代码似乎比您想要实现的目标所需的复杂得多。例如,要打印 map 中的所有字符串,只需执行以下操作:

for (Entry<String, String> entry: garMap.entrySet()) {
System.out.println(entry.key() + " : " + entry.value() + ".");
}

如果你这样做:

map1.keySet().removeAll(map2.keySet()) 

然后这将根据 key 删除所有重复项。

map1.values().removeAll(map2.values()) 

将根据值删除所有重复项。

map1.entryset().removeAll(map2.entrySet())

将根据键/值对删除所有重复项。

关于java - 树形图条目转换为字符串类型失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24674178/

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