Java:Commons集合泛型:如何让自定义转换器工作
嗨,我正在使用commons collections泛型4.01 我有一个dto对象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
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)来让事情运转起来。啊,是的。听起来好多了