Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java对csv文件中的唯一货币求和_Java - Fatal编程技术网

使用java对csv文件中的唯一货币求和

使用java对csv文件中的唯一货币求和,java,Java,我正在努力制定一个计划,为独特的货币创造价值。我知道如何读取文件,但找不到从CSV文件求和的方法。CSV文件如下所示(忘了在CSV文件中有第一列包含国家,所以IDK如果map有效): 代码 File File=新文件(“File.csv”); 扫描仪阅读器=新扫描仪(文件); ArrayList行=新的ArrayList(); while(reader.hasNextLine()){ String line=reader.nextLine(); 系统输出打印项次(行); 行。添加(行); } r

我正在努力制定一个计划,为独特的货币创造价值。我知道如何读取文件,但找不到从CSV文件求和的方法。CSV文件如下所示(忘了在CSV文件中有第一列包含国家,所以IDK如果map有效):

代码

File File=新文件(“File.csv”);
扫描仪阅读器=新扫描仪(文件);
ArrayList行=新的ArrayList();
while(reader.hasNextLine()){
String line=reader.nextLine();
系统输出打印项次(行);
行。添加(行);
}
reader.close();

您可以将行映射到自定义的
货币类型,然后使用和。假设金额为整数,如果不更改求和收集器:

public class Money {
    private final String symbol;
    private final int amount;

    public Money(String line) {
        String[] values = line.split(", ");
        symbol = values[0];
        amount = Integer.parseInt(values[1]);
    }

    public String getSymbol() { return symbol; }
    public int getAmount() { return amount; }
}

public static void main(String[] args) throws Exception {
    Map<String, Integer> amounts = Files.lines(Paths.get("file.csv"))
            .map(Money::new)
            .collect(Collectors.groupingBy(Money::getSymbol, Collectors.summingInt(Money::getAmount)));
    System.out.println(amounts); // {YEN=156, EUR=100, USD=92}
}
公共类货币{
私有最终字符串符号;
私人最终整数金额;
公共资金(细线){
字符串[]值=行。拆分(“,”);
符号=值[0];
amount=Integer.parseInt(值[1]);
}
公共字符串getSymbol(){return symbol;}
public int getAmount(){return amount;}
}
公共静态void main(字符串[]args)引发异常{
映射数量=Files.line(path.get(“file.csv”))
.map(Money::new)
.collect(Collectors.groupingBy(Money::getSymbol,Collectors.summingit(Money::getAmount));
系统输出打印项次(金额);/{日元=156,欧元=100,美元=92}
}

使用
映射
也许最好使用
映射
,但是您的示例看起来像
映射
就足够了…而不是
文件。readAllLines(…).stream()
为什么不只是
文件。行(…)
File file = new File("file.csv");
Scanner reader = new Scanner(file);
ArrayList<String> rows = new ArrayList<String>();

while (reader.hasNextLine()) {
    String line = reader.nextLine();
    System.out.println(line);
    rows.add(line);
}

reader.close();
public class Money {
    private final String symbol;
    private final int amount;

    public Money(String line) {
        String[] values = line.split(", ");
        symbol = values[0];
        amount = Integer.parseInt(values[1]);
    }

    public String getSymbol() { return symbol; }
    public int getAmount() { return amount; }
}

public static void main(String[] args) throws Exception {
    Map<String, Integer> amounts = Files.lines(Paths.get("file.csv"))
            .map(Money::new)
            .collect(Collectors.groupingBy(Money::getSymbol, Collectors.summingInt(Money::getAmount)));
    System.out.println(amounts); // {YEN=156, EUR=100, USD=92}
}