我有一个数据集,其值包含两列(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值?
答案 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异常处理,并替换为FileNotFoundException
,IOException
和NumberFormatException
的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);
日期可能是您的价值。