Java 如何读取CSV并将其存储在嵌套地图中

Java 如何读取CSV并将其存储在嵌套地图中,java,Java,我试图创建一个简单的货币兑换程序,从CSV文件读取并从一种货币兑换到另一种货币 这些是我的CSV文件中的数据 Symbol, Currency, Dollar USD,US Dollar,1 EUR,Euro,0.842850125 GBP,British Pound,0.761549464 INR,Indian Rupee,63.72054347 AUD,Australian Dollar,1.259237335 CAD,Canadian Dollar,1.257801755 .......

我试图创建一个简单的货币兑换程序,从CSV文件读取并从一种货币兑换到另一种货币

这些是我的CSV文件中的数据

Symbol, Currency, Dollar
USD,US Dollar,1
EUR,Euro,0.842850125
GBP,British Pound,0.761549464
INR,Indian Rupee,63.72054347
AUD,Australian Dollar,1.259237335
CAD,Canadian Dollar,1.257801755
....... 
这是我的密码

BufferedReader br = new BufferedReader(new FileReader("src/forex.csv"));
    String line = null;
    Map<String,Map<String, String>> outer = new HashMap<>();
    Map<String, String> inner1 = new HashMap<>();

    while((line = br.readLine())!=null){
        String str[] = line.split(",");
        inner1.put(str[1],str[2]);
        outer.put(str[0],inner1);
    }

    System.out.println(outer);
但我现在得到的数据太长了。我猜对于每种货币,它都在存储来自所有货币的所有数据,并且循环不断


知道如何修复它吗?

您将相同的
HashMap
inner1
放入所有
外部
-节点。您可以为每个条目创建一个单独的映射,如下所示:

BufferedReader br = new BufferedReader(new FileReader("src/forex.csv"));
String line = null;
Map<String,Map<String, String>> outer = new HashMap<>();

while((line = br.readLine())!=null){
    String str[] = line.split(",");
    Map<String, String> inner1 = new HashMap<>();
    inner1.put(str[1],str[2]);
    outer.put(str[0],inner1);
}

System.out.println(outer);
BufferedReader br=new BufferedReader(新文件阅读器(“src/forex.csv”);
字符串行=null;
Map outer=新的HashMap();
而((line=br.readLine())!=null){
字符串str[]=line.split(“,”);
Map inner1=新的HashMap();
inner1.put(str[1],str[2]);
外部.put(str[0],内部1);
}
系统输出打印项次(外部);

将相同的
HashMap
inner1
放入所有
外部
-节点。您可以为每个条目创建一个单独的映射,如下所示:

BufferedReader br = new BufferedReader(new FileReader("src/forex.csv"));
String line = null;
Map<String,Map<String, String>> outer = new HashMap<>();

while((line = br.readLine())!=null){
    String str[] = line.split(",");
    Map<String, String> inner1 = new HashMap<>();
    inner1.put(str[1],str[2]);
    outer.put(str[0],inner1);
}

System.out.println(outer);
BufferedReader br=new BufferedReader(新文件阅读器(“src/forex.csv”);
字符串行=null;
Map outer=新的HashMap();
而((line=br.readLine())!=null){
字符串str[]=line.split(“,”);
Map inner1=新的HashMap();
inner1.put(str[1],str[2]);
外部.put(str[0],内部1);
}
系统输出打印项次(外部);

首先,您不能重复使用
inner1
,因为您将一次又一次地填充同一张地图。此外,与所需的输出相比,您没有将正确的值放入
内部

while ((line = br.readLine()) != null) {
    String str[] = line.split(",");

    String currencyCode = str[0];

    Map<String, String> inner = new HashMap<>();

    String currency = str[1];
    inner.put('Currency', currency);

    String xChangeRate = str[2];
    inner.put('Dollar', xChangeRate);

    outer.put(currencyCode, inner);
}
while((line=br.readLine())!=null){
字符串str[]=line.split(“,”);
字符串currencyCode=str[0];
Map inner=新的HashMap();
字符串currency=str[1];
内部看跌期权(“货币”,货币);
字符串交换率=str[2];
内部看跌期权(“美元”,兑换率);
外部。put(货币代码,内部);
}

首先,您不能重复使用
inner1
,因为您将一次又一次地填充同一张地图。此外,与所需的输出相比,您没有将正确的值放入
内部

while ((line = br.readLine()) != null) {
    String str[] = line.split(",");

    String currencyCode = str[0];

    Map<String, String> inner = new HashMap<>();

    String currency = str[1];
    inner.put('Currency', currency);

    String xChangeRate = str[2];
    inner.put('Dollar', xChangeRate);

    outer.put(currencyCode, inner);
}
while((line=br.readLine())!=null){
字符串str[]=line.split(“,”);
字符串currencyCode=str[0];
Map inner=新的HashMap();
字符串currency=str[1];
内部看跌期权(“货币”,货币);
字符串交换率=str[2];
内部看跌期权(“美元”,兑换率);
外部。put(货币代码,内部);
}