如何从Java中的数据集中检索值

时间:2013-12-20 14:15:34

标签: java dataset

我有一个数据集,其值包含两列(x和y),

1974  100   
1985  150
1987  120
1999  123

对于每个x,我想得到y的值。我如何用Java做到这一点?我知道从哪里开始,但不知道如何继续。我创建了一个名为 data 的动态参数,类型为Dataset,因为x列是一年,我正在考虑做这样的事情;

data().get( getYear() + getDayOfYear(date())/365 )  

这是一种正确的思考方式还是我完全走错了路?另外如果我没有使用java.util.Date,我怎样才能得到每个x的y值?

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么您有一个数据集可以将每年的地图映射到,例如,当年发生的事件的次数。如果您的数据集在任何给定年份中只包含一个y(即您没有1986年的两行),那么您需要的是来自java.util.Collection框架的Map。像这样:

Map<Integer, Integer> dataset = new HashMap<>();  // my syntax assumes you have java7+
dataset.add(1974,100);
dataset.add(1985,150);
…

要检索特定年份的数据,请使用

int numberOfEvents = dataset.get(theYear);

这里有几个很好的参考资料,指出你的路上:

因为你问过,这是你如何从文本文件中加载它:

public class DataSetLoader {
   public static void main(String []args){
      Map<Integer,Integer> myData = loadData("/path/to/my/data.txt");
   }

   // load the dataset; may return an empty or partly filled map if there is an error
   private static Map<Integer,Integer> loadData(String filename) {
      Map<Integer,Integer> dataset = new HashMap<>();
      try (BufferedReader r = new BufferedReader(new FileReader(filename))) {
         String s;
         while ((s = r.readLine()) != null) {
            String[] columns = s.split("\\s+");
            Integer year = Integer.valueOf(columns[0]);
            Integer data = Integer.valueOf(columns[1]);
            System.out.println("Adding ("+year+","+data+")");
            dataset.put(year,data);
         }
      } catch (Exception ex) {
         // this is not great exception handling, but it will let you know about 
         // any problems while debugging
         ex.printStackTrace();
      }
      return dataset;
   }  

}

如果您的数据不干净,Integer.valueOf()也可能抛出NumberFormatException - 您可能希望明确捕获它。最后,您希望删除catch-all异常处理,并替换为FileNotFoundExceptionIOExceptionNumberFormatException的catch子句。

答案 1 :(得分:0)

使用HashMap ...您可以将name:value对放入地图并通过名称

进行检索

http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

HashMap<String,String> map = new HashMap<String,String>();
map.put(name,value);

String retValue =map.get(name);

日期可能是您的价值。