java - 使用 java 流将包含标题和行的 csv 文件转换为 hashmap 数组

标签 java csv java-8 stream java-stream

我如何使用java流将标题和行的csv文件转换为散列图数组? 例如。

orderNo, totals, charges, taxes, payments
ord121,1500.00,30.00,25.00,Paid
ord8925,1700.00,130.00,75.00,Paid
ord7115,300.00,130.00,75.00,Paid

Hashmap 的 Array[0] 名称应为 orderNo,值为 ord121
Hashmap的Array[1]应名称为orderNo,值为ord8925...等等

尝试过这个,但坚持如何将 row(0) 内容作为 HashMap 名称

公共(public)静态无效readFileToMap(){

    Pattern pattern = Pattern.compile(",");
    String csvFile = inputDirPreFix + "input/file2.tsv";
    try (BufferedReader in = new BufferedReader(new FileReader(csvFile));){

        Map<String,String> namefreq = in
                .lines()
                .skip(1)
                .map(lineData -> pattern.split(lineData))
                .collect(HashMap::new, (map, lineData) ->
                                map.put(lineData[0], lineData[1]),
                        Map::putAll);
        namefreq.forEach((k, v) -> System.out.println(k + " => " + v));
    }
    catch (Exception ex) {
        Logger.getLogger("FileProcessing").log(Level.SEVERE, null, ex);
    }
}

最佳答案

我认为你应该将每一行转换为 Map<String, String> ,然后将所有 map 收集到 List<Map<String, String>> :

try (BufferedReader in = new BufferedReader(new FileReader(csvFile))) {

    List<Map<String,String>> namefreq = in.lines()
        .skip(1)
        .map(line -> pattern.split(line)) // or pattern::split
        .map(line -> {
            Map<String, String> map = new HashMap<>();
            map.put("NAME_OF_FIRST_COLUMN", line[0]);
            map.put("NAME_OF_SECOND_COLUMN", line[1]);
            // ... (etc)
            return map;
         })
        .collect(Collectors.toList());
}
<小时/>

编辑:您最好创建自己的类,而不是收集到 map 列表,即 Order ,即 orderNo , totals等属性,加上 getter 和 setter 以及接收整行或每个属性的构造函数。然后,您可以收集到 List<Order> .

关于java - 使用 java 流将包含标题和行的 csv 文件转换为 hashmap 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52972587/

相关文章:

c# - 计算 CSV 文件中的名称

python - 按特定列数据过滤 CSV 行

java - 使用第 3 方库的微调器时出现 setOnItemSelectedListener 错误

java - 在 Java Spring Hibernate 中连接多个表

java - 简单日期格式错误

java - 如何在具有单独索引的 Java 8 中应用 reduce/collect 过滤器?

java - 使用 Java 泛型反序列化

java - 如果我在点击开始后通过主菜单运行它,战舰应用程序会崩溃

python - 为什么 python 认为我列表中的每个字符都是一个元素?

java jvisualvm/jconsole 具有线性内存消耗