【发布时间】:2017-10-11 02:33:51
【问题描述】:
我目前有以下 HTML 格式的数据:
Year| car type | # of cars sold
2001| Toyota-Camry | 242435
2000| Honda-Accord | 344423
2001| Honda-Accord | 555255
2000| Honda-Civic | 342344
2008| Toyota-Prius | 666154
1996| Honda-Accord | 114526
2001| Toyota-Prius | 90234
为了检索这些数据,我有一个BufferedReader,它从 HTML 中读取行。在数据出现之前,我在开头跳过了几行,因为有空格。所以我目前的代码是
public class carSales {
private Map<Integer, HashMap<Integer, String>> carSalesMan =
new HashMap <Integer, HashMap<Integer, String>>;
private void getcarTypes(String url) {
try {
URL urlz = new URL(url);
URLConnection urlc = myURL.openConnection();
BufferedReader line = new BufferedReader
(new InputStreamReader(urlConnection.getInputStream()));
String next;
next = line.readLine();
while (next.contains("</s>") {
String[] parts = next.split(" ");
if (carSalesMan.isEmpty() || carSalesMan.get(Integer.parseInt(parts[0])) == null {
carSalesMan.put(Integer.parseInt(parts[0], new HashMap<Integer, String>());
carSalesMan.get(Integer.parseInt(parts[0])).put(Integer.parseInt(parts[2]), parts[1])
}
}
catch (IOException e) {
}
}
问题在于它似乎只存储具有唯一年份的数据。所以我的carSalesMan 变量的大小将是 4,因为我只有 4 个独特的年份,并且随着列表的下降,它们会相互覆盖。有没有一种简单的方法可以添加所有车型,即使是同一年?
【问题讨论】:
-
是的,
Map是键到值的唯一映射。您可能应该做的是创建一个包含年份、汽车类型和销售单位的对象(不要忘记.equals()和.hashcode(),然后将它们放入一个结构(可能是一个集合)并根据需要进行处理。 -
这看起来不像是
Map的用例。随着每次添加新字段,您注定要不断嵌套越来越多的Maps。相反,您应该创建一个Car类,并使用List<Car>或Set<Car>。 -
@4castle 是的,我理解,但不幸的是,这是使用 HashMaps 和 Maps 的项目要求
-
您能否详细说明项目的实际要求,因为这可能是 XY 问题。
标签: java html hashmap synchronization bufferedreader