Java:Commons集合泛型:如何让自定义转换器工作

Java:Commons集合泛型:如何让自定义转换器工作,java,generics,transformer,apache-commons-collection,Java,Generics,Transformer,Apache Commons Collection,嗨,我正在使用commons collections泛型4.01 我有一个dto对象 Class PricingDto { private Double tax; private Double price; private Double tip; // getters and setters } 我有一个列表list pricingDtos=this.pricingService.getAllPricings() 我有一个私有的静态类 import org.apach

嗨,我正在使用commons collections泛型4.01

我有一个dto对象

Class PricingDto {
   private Double tax;
   private Double price;
   private Double tip;

   // getters and setters
}
我有一个列表
list 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. 
            }
        }
    }
}
import org.apache.commons.collections15.Transformer;
导入org.apache.commons.collections15.list.TransformedList;
类TotalServiceImpl实现TotalService{
公共静态最终价格变压器定价=
新的主变压器();
专用静态类Pricingto变压器
机具变压器{
公共PricingToTransformer(){}
@凌驾
公共双转换(最终PricingTo PricingTo){
返回pricingDto.getTax()
+pricingDto.getPrice()
+pricingDto.getTips();
}
}
@凌驾
公共列表getListDouble(最终列表优先级){
最终列表汇总表=
改造清单。装饰(pricingDtos,变压器定价);
for(双d:总计){
//打印出来。
}
}
}
}
我的问题是我得到了类强制转换异常,因为totalList中的每个项都是PricingDto而不是Double

2)我做错了什么。为泛型公共集合实现自定义转换器的正确方法是什么

报告明确指出:

如果有任何元素已经在 正在装饰的列表,它们不是 转变了

请尝试以下操作:

CollectionUtils.transform(pricingDtos, PRICING_DTO_TRANSFORMER);

它将通过对每个元素应用转换器来转换集合

对我来说,就地改造藏品似乎是一个可怕的难题。我建议改用。它返回一个由原始列表和一个映射函数支持的视图,因此您实际上没有更改任何内容

下面是您的代码的外观:

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;
    }

}
类TotalServiceImpl实现TotalService{ 变压器专用静态最终功能定价= 新的主变压器(); 私有静态类PricingToTransformer实现 作用{ 公共价格变压器(){ } @凌驾 公开双申请(最终价格至价格){ 返回pricingDto.getTax()+pricingDto.getPrice() +pricingDto.getTips(); } } 公共列表getListDouble(最终列表优先级){ 最终名单汇总表= 列表.转换(pricingDtos,定价变压器); for(最终双d:总计){ //打印出来。 } 回归统合主义; } }

Commons Collections可能也有类似的机制,但我一眼就找不到。

必须
getListDouble
实际做什么?它返回一个
列表
,但我不明白
listDouble
实际上是什么意思……它必须做什么?CollectionUtils.transform无法工作,因为我正在将PricingTo类型的对象转换为Double。完成转换后。当我为(Double totalPrice:resultTotals){…}执行时,我得到一个类强制转换异常,表示里面的对象是PricingDto而不是Double。我找到了答案。我不得不使用CollectionUtils.collect(pricingDtos,PricingDtoTransformer)来让事情运转起来。啊,是的。听起来好多了