0

我正在尝试处理 3 个哈希图并将它们的数据放入值对象列表中。但是,我的代码在某处失败时遇到了问题。

这是我想要完成的场景:

Map1 是源地图,map2 和 map3 用于与 map1 进行比较。最后,我将结果存储到 VO(值对象)中。

    HashMap<Integer, BigDecimal> map1=new HashMap<Integer, BigDecimal>();

    map1.put(1,10)
    map1.put(2,20)
    map1.put(3,30)
    map1.put(4,40)
    map1.put(5,50)

    Map<Integer,String> map2=new HashMap<Integer,String>();


    map2.put(1,"Y");
    map2.put(2,"N");

   Map<Integer,String> map3=new HashMap<Integer,String>();

   map3.put(3,"N");
   map3.put(4,"N");
   map3.put(5,"N");


public Map<Integer, BigDecimal> process(
            final Map<Integer, BigDecimal> map1,
            final Map<Integer, String> map, final List<EmployeeVO> empDetails) {

        final Iterator<Integer> keys = map1.keySet().iterator();
        while (keys.hasNext()) {
            final EmployeeVO empVO = new EmployeeVO();
            final Integer empKeys = keys.next();
            empVO.setEmpId(empKeys);
            empVO.setEmpAmount(map1.get(empKeys));

            if (("Y".equals(map.get(empKeys)))) {

                empVO.setInd("Y");
                keys.remove();

            } else
                empVO.setInd("N");
            empDetails.add(empVO);
        }

        return map1;
    }

员工VO:

    public class EmployeeVO{

    private BigDecimal empAmount=new BigDecimal(0);
    private Integer empId;
    private String ind;

   //setters and getters

   }

我正在调用上面的方法,如下所示,令人惊讶的是,我的列表对象中有 10 条记录。你能告诉我如何解决这个问题吗?

    final List<EmployeeVO> empDetails = new CopyOnWriteArrayList<EmployeeVO>();

    final Map<Integer, BigDecimal> result1 = process(map1, map2, empDetails );
   final Map<Integer, BigDecimal> result2 = process(map1, map3, empDetails );

预期结果:列表应包含 5 个 VO 对象,但有 9 个记录

4

1 回答 1

0

我认为问题在这里:

if (("Y".equals(map.get(empKeys))))

因为您的地图是原始地图,而不是通用类型(它的值不是字符串)。您已将此地图定义为:

HashMap map2=new HashMap();
HashMap map3=new HashMap();

尝试制作它:

Map<Integer, String> map2 = new HashMap<Integer, String>();
Map<Integer, String> map3 = new HashMap<Integer, String>();

您还需要制作empDetails地图:

final Map<Integer, EmployeeVO> empDetails = new HashMap<Integer, EmployeeVO>();

并有process方法:

void process(final Map<Integer, Integer> map1,
        final Map<Integer, String> map, final Map<Integer, EmployeeVO> empDetails) {

    final Iterator<Integer> keys = map1.keySet().iterator();
    while (keys.hasNext()) {
        EmployeeVO empVO = new EmployeeVO();
        Integer empId = keys.next();
        empVOsetEmpId(empId);
        empVO.setEmpAmount(map1.get(empId));

        if (("Y".equals(map.get(empId))))
            empVO setInd("Y");
        else
            empVO setInd("N");
        empDetails.put(empId, empVO);
    }
}
于 2013-09-05T18:16:44.080 回答