java - super CSV : Looking for integer equivalent to LMinMax

标签 java supercsv

使用 supercsv,我可以使用 LMinMax() 对长列应用最小和最大约束,但是如何使用映射到整数的列来做到这一点?如果我在映射到 bean 中的整数的列上使用 LMinMax,当我尝试读取中的文件时,我会得到 org.supercsv.exception.SuperCsvReflectionException,因为它正在寻找需要 long 而不是整数的 setter。

最佳答案

唯一可行的细胞处理器组合是这样的

new LMinMax(0, 10, new FmtNumber("###", new ParseInt()))

这太可怕了。

问题是 Super CSV 的 ReflectionUtils 仅允许类型精确匹配(但支持自动装箱)。您可以在 Github 上提出功能请求来修复此问题。

您可以使用 CsvDozerBeanReader 解决此问题(Dozer 非常高兴地支持从 LongInteger 的映射),或者您也可以定义自己的定制细胞处理器如下所示。

public class IntMinMax extends LMinMax {

    public IntMinMax(int min, int max) {
        super(min, max);
    }

    @Override
    public Object execute(Object value, CsvContext context) {
        Long result = (Long) super.execute(value, context);
        return result.intValue();
    }

}

这应该可以工作,但请注意,它不允许处理器在其之后链接(对 super.execute() 的调用重用最小/最大验证,但也意味着您不能阻止它将 Long 传递到下一个处理器,所以我只是禁用了链接)。

关于java - super CSV : Looking for integer equivalent to LMinMax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30511338/

相关文章:

java - 按元素对 XML 数据进行排序?

java - SuperCSV 附加而不是覆盖?

java - 寻找允许按名称读取列的 Java CSV 库

java - 如何在不使用引号字符的分隔文件上使用 Super CSV?

java - 使用 SuperCSV CSVBeanReader 时在字符串上使用什么单元处理器

java - 在子类中覆盖@jsonIgnore

java - 通量: filtering exceptions

java - 如果我将一个重物体作为参数传递给某个函数,成本是多少

java - 对于使用 apache POI 转换为 CSV 时的 xlsx 单元格数据

java - JUnit 断言两个字符串是否相等