繁体   English   中英

如何使用SET类从Type Setters&Getters类的“ Arraylist字符串对象”的Arraylist中获取唯一行

[英]How to get unique rows using SET class from an Arraylist of “Arraylist string objects” of Type Setters & Getters class

我需要Java代码方面的帮助,例如如何从arraylist获得唯一记录,该arraylist是转换一维Value对象(setters和getters)的多维数组。

我正在读取表,并将所有记录放入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();
}

感谢您的投入和帮助。

谢谢拉吉

您将需要使用Comparator接口 ,该接口允许比较多个键-假设您拥有多个键

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

如何实现比较器

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM