【问题标题】:how to get values from an ArrayList<Hashtable<String, ArrayList<String>>>如何从 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&lt;Hashtable&lt;String, ArrayList&lt;String&gt;&gt;&gt; 吗?如果是这样,那就是错误的数据结构(实际上是“并行数组”结构)。你应该定义一个类来保存一行输入作为一个对象。
  • 正如@JimGarrison 所说,您应该重新考虑您的数据结构。
  • 您好,感谢大家的快速回复。实际上,我并没有完全自己建造这个结构。但是,我了解您关于创建类的 cmets,这可能是我的下一步,因为我目前正在学习对象哲学

标签: java string arraylist hashtable


【解决方案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 的解决方案,我也同意你的看法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 2014-01-02
    • 1970-01-01
    • 2013-07-06
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多