Java:Commons-Collections泛型:如何使自定义变换器工作
发布时间:2020-12-15 08:37:44 所属栏目:Java 来源:网络整理
导读:嗨,我正在使用commons集合泛型4.01. 我有一个dto对象. Class PricingDto { private Double tax; private Double price; private Double tip; // getters and setters} 我有一个列表 PricingDto pricingDtos = this.pricingService.getAllPricings(); 比我有
嗨,我正在使用commons集合泛型4.01.
我有一个dto对象. Class PricingDto { private Double tax; private Double price; private Double tip; // getters and setters } 我有一个列表< PricingDto> pricingDtos = this.pricingService.getAllPricings(); 比我有一个私人静态类. import org.apache.commons.collections15.Transformer; import org.apache.commons.collections15.list.TransformedList; class TotalServiceImpl implements TotalService { public static final PricingDtoTransformer PRICING_DTO_TRANSFORMER = new PricingDtoTransformer(); private static class PricingDtoTransformer implements Transformer<PricingDto,Double> { public PricingDtoTransformer() {} @Override public Double transform(final PricingDto pricingDto) { return pricingDto.getTax() + pricingDto.getPrice() + pricingDto.getTips(); } } @Override public List<Double> getListDouble(final List<PricingDto> pricingDtos) { final List<Double> totalList = TransformedList.decorate(pricingDtos,PRICING_DTO_TRANSFORMER); for (Double d : totalList) { // print them. } } } } 我的问题是我得到类强制转换异常,因为totalList中的每个项目都是PricingDto而不是Double. 2.)我做错了什么.什么是为generics commons-collections实现自定义变换器的正确方法. 解决方法
改变收藏品对我来说似乎是一个可怕的黑客.我建议改用
Google Guava.它是
Lists.transform(List,Function) 返回一个由原始List和映射函数支持的视图,所以你实际上并没有改变任何东西.
这是您的代码的样子: class TotalServiceImpl implements TotalService{ private static final Function<PricingDto,Double> PRICING_DTO_TRANSFORMER = new PricingDtoTransformer(); private static class PricingDtoTransformer implements Function<PricingDto,Double>{ public PricingDtoTransformer(){ } @Override public Double apply(final PricingDto pricingDto){ return pricingDto.getTax() + pricingDto.getPrice() + pricingDto.getTips(); } } public List<Double> getListDouble(final List<PricingDto> pricingDtos){ final List<Double> totalList = Lists.transform(pricingDtos,PRICING_DTO_TRANSFORMER); for(final Double d : totalList){ // print them. } return totalList; } } Commons-Collections可能也有类似的机制,但我乍看之下找不到它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |