如何从ArrayList<Hashtable<String, ArrayList<String>>>中获取值

4

我有一个函数,能够读取以下结构的多个文件中的数据:

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]}

我的问题是: 如何分离获取键(Temps,Psals,ids等)的不同值,以便使用jfreechart绘制它们?
提前致谢。

1
你自己构建了 ArrayList<Hashtable<String, ArrayList<String>>> 吗?如果是的话,那么这是错误的数据结构(实际上是“并行数组”结构)。你应该定义一个类来作为一个对象来保存输入的一行。 - Jim Garrison
正如@JimGarrison所说,您应该重新考虑您的数据结构。 - soufrk
大家好,感谢你们的快速回复。实际上,我并不是完全独立构建这个结构的。但是,我理解你们关于创建一个类的评论,这可能会是我的下一步,因为我目前正在学习对象哲学。 - Cristian Muñoz
3个回答

2

感谢您的回应,Hitesh。我通过使用值而不是keySet解决了这个问题。然而,您的回答对我获取值非常有用。 - Cristian Muñoz

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
            }

        }
    }

我不确定你想如何处理这个问题,但这可能是迭代列表并获得每个记录的值的方法。

1

我最终通过使用 Hitesh 的回答解决了这个问题,具体方法如下:

ArrayList keyList = new ArrayList(processedFilesArray.get(1).values());
    System.out.println(keyList.get(0));

这将返回我从第二个读取的文件中的第一组(Psals):
    [35.9, 35.7, 36.8, 37.7, 37.9, 37.9]

谢谢你们的帮助!!

由于 Hashtable 中的顺序不能保证,因此这非常容易出错。不要通过复制 Hashtable.values() 返回的集合并按索引访问列表来访问值列表,而应该优先使用以下方式访问:processedFilesArray.get(i).get("Psals")。如果想要处理 Hashtable 中的所有元素,则最好使用 Manu AG 的答案。 - Valentin
谢谢Valentin,它比我的解决方案更好。我也同意你对Manu AG的解决方案的看法。 - Cristian Muñoz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接