如何使用来自" Arraylist字符串对象"的Arraylist中的SET类来获取唯一行Type Setters& Getters类

时间:2014-03-26 00:51:53

标签: java arraylist deduplication

我需要你在java代码中的帮助,比如我如何从arraylist获取唯一记录,这是一个投射一类Value对象(setter和getters)的多维数组。

我正在阅读一张桌子并将所有记录放入arraylist的ararylist中。 “table”将有每个表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();
}

感谢您的意见和帮助。

由于 拉吉

3 个答案:

答案 0 :(得分:0)

你需要使用Comparator Interface来比较多个键 - 假设你有超过1个键

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

如何实施Comparator

答案 1 :(得分:0)

您可以将列表添加到java.util.Set(在我的示例中使用LinkedHashSet),该列表仅包含唯一对象。 “Unique”由您放入List和Set的对象中实现的方法(hashCode()和equals())定义。 在实现hashCode()和equals()方法之后,您可以将List放入Set中,该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);

答案 2 :(得分:0)

您可以使用Java5 foreach循环来执行此操作。

    for (EssVO essVO : set)
    {
        System.out.println(essVO);
    }