超级CSV:查找等效于LMinMax的整数

时间:2015-05-28 15:46:45

标签: java supercsv

使用supercsv,我可以使用LMinMax()将最小和最大约束应用于长列,但是如何使用映射到整数的列来执行此操作?如果我在一个映射到我的bean中的整数的列上使用LMinMax,当我尝试读取该文件时,我得到一个org.supercsv.exception.SuperCsvReflectionException,因为它正在寻找一个取长整数而不是整数的setter。

1 个答案:

答案 0 :(得分:0)

唯一可行的单元处理器组合就像

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()重用最小/最大验证,但也意味着你不能阻止它通过{{1到下一个处理器,所以我只是禁用了链接。)