加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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可能也有类似的机制,但我乍看之下找不到它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读