如何从 ArrayList<Hashtable<String, ArrayList<String>>> 获取值
Posted
技术标签:
【中文标题】如何从 ArrayList<Hashtable<String, ArrayList<String>>> 获取值【英文标题】:how to get values from an ArrayList<Hashtable<String, ArrayList<String>>> 【发布时间】:2016-08-23 10:58:56 【问题描述】:我有一个函数可以从多个文件中读取数据,结构如下:
id date temp psal
1 2016/02/01 37.6 35.9
2 2016/02/02 30.3 35.7
3 2016/02/03 28.2 36.8
4 2016/02/04 27.7 37.7
5 2016/02/05 28.7 37.9
6 2016/02/06 28.7 37.9
函数是:
ArrayList<Hashtable<String, ArrayList<String>>> processedFilesArray = ReadFiles(files);
如果我尝试使用例如检索数据:
System.out.println(processedFilesArray.get(0));
然后我得到以下响应:
Psals=[35.9, 35.7, 36.8, 37.7, 37.9, 37.9], Temps=[37.6, 30.3, 28.2, 27.7, 28.7, 28.7], ids=[1, 2, 3, 4, 5, 6], DateStrings=[2016/02/01, 2016/02/02, 2016/02/03, 2016/02/04, 2016/02/05, 2016/02/06]
我的问题是: 如何使用 jfreechart 单独获取键的不同值(Temps、Psals、ids 等)以绘制它们?
提前致谢
【问题讨论】:
您自己构建了ArrayList<Hashtable<String, ArrayList<String>>>
吗?如果是这样,那就是错误的数据结构(实际上是“并行数组”结构)。你应该定义一个类来保存一行输入作为一个对象。
正如@JimGarrison 所说,您应该重新考虑您的数据结构。
您好,感谢大家的快速回复。实际上,我并没有完全自己建造这个结构。但是,我了解您关于创建类的 cmets,这可能是我的下一步,因为我目前正在学习对象哲学
【参考方案1】:
您可以通过这种方式获取键和值:
//Each hastTable of proccesedFilesArray
for(Hashtable<String,ArrayList<String>> processedFile : processedFilesArray)
//Each entrySet of proccesedFile
for(Entry<String, ArrayList<String>> entry : processedFile.entrySet())
//Filter here by key or value with if conditions
String key = entry.getKey();
ArrayList<String> listValue = entry.getValue();//List of Strings
for(String value : listValue)
//each value per hashtable key
我真的不知道你想如何使用它,但这可能是一种迭代你的列表并获取每条记录的值的方法。
【讨论】:
【参考方案2】:您可以通过方法keySet() 获取哈希表中的键列表,该方法返回键集。
您可以像这样将 Set 转换为 Array 列表:-
ArrayList keyList = new ArrayList(processedFilesArray.get(0).keySet());
更多关于keySethttp://www.tutorialspoint.com/java/util/hashmap_keyset.htm
【讨论】:
感谢您的回复 Hitesh。我通过使用值而不是 keySet 来解决它。但是,为了获得价值,您的回复对我很有用。【参考方案3】:我终于在 Hitesh 回复后解决了这个问题,方法是:
ArrayList keyList = new ArrayList(processedFilesArray.get(1).values());
System.out.println(keyList.get(0));
这会返回我读取的第二个文件中的第一组(诗篇):
[35.9, 35.7, 36.8, 37.7, 37.9, 37.9]
谢谢大家的帮助!!
【讨论】:
这是非常脆弱的,因为在 Hashtable 中不能保证顺序。与其通过将Hashtable.values()
返回的集合复制到ArrayList
中并按索引访问这些值来访问值列表,不如以这种方式访问它:processedFilesArray.get(i).get("Psals")
。理想情况下,如果您想处理 Hashtable
中的所有元素,您应该使用 Manu AG 的答案。
感谢 Valentin,它比我的解决方案效果更好。对于 Manu AG 的解决方案,我也同意你的看法。以上是关于如何从 ArrayList<Hashtable<String, ArrayList<String>>> 获取值的主要内容,如果未能解决你的问题,请参考以下文章
如何从 ArrayList<Double> 转换为 double[] [重复]
如何从 ArrayList<String> 转换为 double[]? [复制]