0

我需要您在 java 代码中的帮助,例如如何从 arraylist 中获取唯一记录,该 arraylist 是转换类 Value 对象(setter 和 getter)的多维数组。

我正在阅读一个表格并将所有记录放在arraylist 的一个ararylist 中。“表”将有整个表,每列 3 列 25 行,其中一些材料编号是唯一的,有些是重复的。我想摆脱重复的材料编号行,只获得唯一的材料行数。

ArrayList<EssVO> recordInstance = new ArrayList<EssVO>();
EssVO ESSvorecord = new EssVO();
for (int i = 0; i < table.getNumRows(); i++){
table.setRow(i);            
ESSvorecord = new EssVO();             
ESSvorecord.setCONTRACT_NUMBER(table.getString("CONTRACT_NUMBER"));
ESSvorecord.setCONTRACT_LINE_ITEM(table.getString("CONTRACT_LINE_ITEM"));
ESSvorecord.setMATERIAL_NUMBER(table.getString("MATERIAL_NUMBER"));             
recordInstance.add(ESSvorecord);
}
//Display
Iterator<EssVO> itrForSubs = recordInstance.iterator();         
while(itrForSubs.hasNext()){
    ESSvorecord = itrForSubs.next();           
ESSvorecord.getCONTRACT_NUMBER();
ESSvorecord.getCONTRACT_LINE_ITEM();
ESSvorecord.getMATERIAL_NUMBER();
}

感谢您的意见和帮助。

谢谢拉吉

4

3 回答 3

0

您需要使用允许比较多个键的比较器接口- 假设您有超过 1 个键

如果它们返回的值等于 0,则可以消除将它们添加到 List 中。

如何实现比较器

于 2014-03-26T01:06:56.247 回答
0

您可以将列表添加到仅包含唯一对象的 java.util.Set(在我的示例中使用 LinkedHashSet)。“唯一”由您放入 List 和 Set 的对象中实现的方法(hashCode() 和 equals())定义。实现 hashCode() 和 equals() 方法后,您可以将 List 放入 Set 中,该集合仅包含基于 equals() 和 hashCode() 的唯一记录。

这是 EssVO 的 hashCode() 和 equals() 的代码示例:

@Override
public int hashCode() {
    return this.number.hashCode();
}

@Override
public boolean equals(Object obj) {
    if(EssVO.class.isInstance(obj))
    {
        EssVO essVO = (EssVO)obj;

        if(this.number.equals(essVO.getNumber()))
        {
            return true;
        }
    }
    return false;
}

    List<EssVO> list = new ArrayList<EssVO>(2);

    list.add(new EssVO("A1", "A1 Name", "This A1 Name"));
    list.add(new EssVO("A2", "A2 Name", "This A2 Name"));
    list.add(new EssVO("A3", "A3 Name", "This A3 Name"));
    list.add(new EssVO("B1", "B1 Name", "This B1 Name"));
    list.add(new EssVO("B2", "B2 Name", "This B2 Name"));
    list.add(new EssVO("A2", "A2 Name", "This A2 Name"));
    list.add(new EssVO("A3", "A3 Name", "This A3 Name"));
    list.add(new EssVO("C1", "C1 Name", "This C1 Name"));
    list.add(new EssVO("B2", "B2 Name", "This B2 Name"));

    Set<EssVO> set = new LinkedHashSet<EssVO>();
    set.addAll(list);
于 2014-03-26T03:02:51.630 回答
0

您可以使用 for Java5 foreach 循环来做到这一点。

    for (EssVO essVO : set)
    {
        System.out.println(essVO);
    }
于 2014-03-30T04:20:21.277 回答