java - OpenCSV - 将多个 CSV 列映射到单个 bean 属性

标签 java csv opencsv

我有一个要求,

  • 将两个 CSV 列合并为一个 bean 属性。
  • 对列值执行简单的数学运算并映射到 bean 属性。

  • 想知道是否可以使用 OpenCSV 注释进行类似的操作。

    输入CSV
    User ID, First Name, Last Name, Worked Minutes
    1234,Jon,Snow,60
    1235,Rob,Stark,30
    

    bean
    public class Employee {
    
      @CsvBindByName(column = "Employee ID")
      private String userId;
    
      //this should be "First Name, Last Name"
      private String employeeName;
    
      //this should be Worked Minutes/60
      private String workedHours;
    
      //getters and setters
    
    }
    

    我设法做到这一点的唯一方法是将列映射为单独的属性( userIdfirstNamelastNameworkedMinutes ),然后修改 employeeNameworkedHours getter 方法,但我觉得应该有更好的方法来做到这一点。

    最佳答案

    我不知道如何用 OpenCSV 做到这一点,但我写了一个名为 jflat-core 的库。可以处理对象和平面文件之间的这种复杂映射。

            CSVReader<Employee> csvReader = CSVReader
                    .createWithHeaderMapping(Employee.class,
                            new String[] {"User ID", "First Name", "Last Name", "Worked Minutes"},
                            new String[] {"userId", "firstName", "lastName", "workedHours" });
            //register a special converter for the property workedHours
            csvReader.registerConverter("workedHours",
                    minutes -> String.valueOf(Double.valueOf(minutes)/60.0));
            List<Employee> employees = csvReader.readAllWithCallback("employees.csv",
                    //The callback can be used to help map attributes from the raw record to the target bean
                    (record, employee) -> {
                        String name = String.format("%s %s", record.get("First Name"), record.get("Last Name"));
                        employee.setEmployeeName(name);
                    });
            assertEquals(2, employees.size());
            assertEquals("Jon Snow", employees.get(0).getEmployeeName());
            assertEquals("0.5", employees.get(1).getWorkedHours());
    

    关于java - OpenCSV - 将多个 CSV 列映射到单个 bean 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59769312/

    相关文章:

    java - 我可以将 Apache Tomcat 7 与 servlet api 2.5 一起使用吗

    python - 将 json 转换为 csv 时出现 "List index not in range"错误?

    java - 通过 Rest 下载 CSV 文件

    android - 使用希伯来语文本创建 CSV 文件

    java - 初学者 Java 项目 : Basic Pokedex using if-else statements. 有建议吗?

    java - 客户端服务器;客户端代码完成后服务器抛出 EOFException

    python - AZure DataBricks - 大型 CSV 文件字段验证

    java - 如何在@CsvBindByName 中获取确切名称?

    java - 如何在jna中获取指向结构体数组的指针

    python - GAE Python - 如何将 csv.writer 的结果附加到电子邮件中?