以下是问题提示: 使用格式 -
创建包含以下信息的哈希 countryname => "capital:population:currency name"
创建至少5条记录。
打印人口最多的国家/地区的详细信息 打印资本名称以“L”开头的国家/地区的货币名称。
为此,我考虑使用put()
填充记录,将hashmap的值转换为数组,使用":"
分隔符拆分数组,并执行循环以找出最大值各栏目。
我想知道这是否是最佳方式,或者会有更好的方法。如果这种方式是理想的,我无法将Object [] countryValues
(在下面的代码中)转换为String数组,因此我可以在其上使用split函数。
我希望这会将值与":"
分隔符分开。
HashMap<String,String> countrydata = new HashMap<String, String>();
countrydata.put("USA", "Washington DC:323,000,000:Dollar");
countrydata.put("Thailand", "Bangkok:69,000,000:Baht");
countrydata.put("Vietnam", "Hanoi:93,000,000:Dong");
countrydata.put("Laos", "Lientiane:7,000,000:Dollar");
countrydata.put("Belize", "Belmopan:370,000:Dollar");
Object [] countryValues = countrydata.keySet().toArray();
for (int i=0; i<countryValues.length; i++){
String [] splitted = countryValues[i].split(":");
}
for (int j=0; j<splitted.length; j++){
System.out.println(splitted[i]);
}
错误:
类型为Object的方法split(String)
未定义。
答案 0 :(得分:0)
让我们一起检查代码:
HashMap<String,String> countrydata = new HashMap<String, String>();
countrydata.put("USA", "Washington DC:323,000,000:Dollar");
countrydata.put("Thailand", "Bangkok:69,000,000:Baht");
countrydata.put("Vietnam", "Hanoi:93,000,000:Dong");
countrydata.put("Laos", "Lientiane:7,000,000:Dollar");
countrydata.put("Belize", "Belmopan:370,000:Dollar");
所以你有一个Map,其中键是国家名称,值是各种信息作为字符串,要拆分。
Object [] countryValues = countrydata.keySet().toArray();
因此,您要创建一个对象数组,数组中的每个对象都是地图的键:国家/地区名称。
for (int i=0; i<countryValues.length; i++){
String [] splitted = countryValues[i].split(":");
并且您因此试图分割键而不是值。而且,根本不需要将集合转换为数组来执行for循环。您可以直接迭代集合:
for (String value: countrydata.values()) {
// split the value
}
答案 1 :(得分:0)
罪魁祸首就是这条线:
Object [] countryValues = countrydata.keySet().toArray();
除了被命名为错误的内容(countryKeys
或countryNames
,而不是countryValues
)之外,它还会生成一个Object
类型的数组,而不是String
} array。
您根本不需要countryValues
:而是导航您的哈希映射的entrySet
,如下所示:
for (Map.Entry<String,String> e : countrydata.entrySet()) {
String name = e.getKey();
String data = e.getValue();
...
}
如果您想更进一步,请创建一个包含四个属性(名称,大写,总体和货币)的类CountryData
,创建此类的实例,并将它们放在地图中。将地图的类型更改为Map<String,CountryData>
。这样,如果您需要进行一些额外的处理,则不需要重复拆分。
答案 2 :(得分:0)
使用java 8流,它将非常简单有效,如下所示,只需为Country定义简单的POJO。
List<Country> countries = new ArrayList<>();
countries.add(new Country("USA", "Washington DC", 323000000L, "Dollar"));
countries.add(new Country("Thailand", "Bangkok", 69000000L, "Baht"));
countries.add(new Country("Vietnam", "Hanoi", 93000000L, "Dong"));
countries.add(new Country("Laos", "Lientiane", 7000000L, "Dollar"));
countries.add(new Country("Belize", "Belmopan", 370000L, "Dollar"));
Set<String> filteredCountries = countries.stream()
.filter(p -> p.getCapital().startsWith("L")).map(p -> p.getName())
.collect(Collectors.toSet());
Country maxPopulationCountry = countries.stream()
.max(Comparator.comparing(p -> p.getPopulation())).get();
System.out.println("Max Population Country Details : " + maxPopulationCountry);
System.out.println("Countries with Capital starts with L : " + filteredCountries);