有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Guava将映射<String,List<Double>>到List<TargetObject>

我必须将源对象转换成目标对象。请参阅下面使用番石榴的示例代码

下面是一个测试类,其中有一个源对象Map<String, List<Double>>,我需要将其转换为Target

public class TestMapper {   
    public static void main(String[] args) {
        String key = "123AA";
        List<Double> values = new ArrayList<Double>();
        values.add(15.0);
        values.add(3.0);
        values.add(1.0);

        //source
        Map<String, List<Double>> source = new HashMap<String, List<Double>>();
        source.put(key, values);

        //target
        List<TargetObject> target = new ArrayList<>();

        //transformation logic      
    }
}

目标对象:

public class TargetObject 
{
    private int pivotId;
    private int amt1;
    private int amt2;
    private int amt3;

    public int getPivotId() {
        return pivotId;
    }

    public void setPivotId(int pivotId) {
        this.pivotId = pivotId;
    }

    public int getAmt1() {
        return amt1;
    }

    public void setAmt1(int amt1) {
        this.amt1 = amt1;
    }

    public int getAmt2() {
        return amt2;
    }

    public void setAmt2(int amt2) {
        this.amt2 = amt2;
    }

    public int getAmt3() {
        return amt3;
    }

    public void setAmt3(int amt3) {
        this.amt3 = amt3;
    }
}

你能建议我用番石榴或其他好的原料药吗

我想我可以用下面的方式来做。。。如果有更好的方法,请告诉我

Map<Integer, TargetObject> transformEntries = 
                Maps.transformEntries(source, new EntryTransformer<Integer, List<Integer>, TargetObject>() {
                        @Override
                        public TargetObject transformEntry(Integer key, List<Integer> values) {
                            return new TargetObject(key, values.get(0), values.get(1), values.get(2));
                        }
                });

共 (2) 个答案

  1. # 1 楼答案

    使用番石榴Lists

    List<TargetObject> resultList = Lists.transform(source.entrySet(),
        new Function<Entry<Integer, List<Integer>>, TargetObject>(){...});
    
  2. # 2 楼答案

    我建议将番石榴FluentIterable用于此转换,因为它会生成一个不可变的列表,使用起来更安全:

            List<TargetObject> resultList = FluentIterable.from(source.entrySet()).transform(
                new Function<Map.Entry<String, List<Double>>, TargetObject>() {
                    @Override
                    public TargetObject apply(Map.Entry<String, List<Double>> integerListEntry) {
                        ...
                    }
    
                }).toList();