【问题标题】:Removing Duplicate from Arraylist and Getting the duplicate of one property in a list从 Arraylist 中删除重复项并获取列表中一个属性的重复项
【发布时间】:2011-04-25 07:41:11
【问题描述】:

我有一个数组列表说“templist”,它会有项目说“凳子”

现在列表包含重复项

1 abc wwww.com lob1
1 abc wwww.com lob2

现在我想要喜欢

1 abc wwww.com (lob1,lob2)

可能是一个单独的 lob 列表。我们怎么做呢?请帮忙

List tempList = new ArrayList();

我添加了 ServiceItem 类型的项目(其属性类似于 id,name,url,lob))。
就像说我会复制id,name,url,因为这三个可以映射到不同的lobs

我希望前三个属性是一个条目,最后一个属性应该是不同 lobs 的列表。

我对代码进行了更改。现在。这是代码。告诉我如何实现结果为 1 | ABC,BCA

公共类 ListTest {

public static void main(String args[]){

    List TestList = new ArrayList();

    MyBean myBean = new MyBean();
    MyBean myBean2 = new MyBean();
    myBean.setId("1");
    myBean.setLob("ABC");
    myBean2.setId("1");
    myBean2.setLob("BCA");

    TestList.add(myBean);
    TestList.add(myBean2);

}   

}

公共类 MyBean {

    private String id;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getLob() {
        return lob;
    }
    public void setLob(String lob) {
        this.lob = lob;
    }
    private String lob;

}

【问题讨论】:

  • 有点不清楚。更多解释将帮助我们获得最佳答案
  • 添加了更多代码并更新了问题

标签: java arraylist


【解决方案1】:

最后我使用 apache collections multihashmap 解决了这个问题。但从 3.2 开始,它已被弃用,所以我使用 3.1 版本。

这是最终代码。

public class ListTest {

public static void main(String args[]){

    List<MyBean> TestList = new ArrayList<MyBean>();

    MyBean myBean = new MyBean();
    MyBean myBean2 = new MyBean();
    myBean.setId("1");
    myBean.setLob("ABC");
    myBean2.setId("1");
    myBean2.setLob("BCA");

    TestList.add(myBean);
    TestList.add(myBean2);

    for(int i=0;i<TestList.size();i++){
        MyBean result = (MyBean)TestList.get(i);
        System.out.println("ID:"+result.getId());
        System.out.println("Lob:"+result.getLob());
    }

     MultiMap mhm = new MultiHashMap();
     for(int i=0;i<TestList.size();i++){
         MyBean result = (MyBean)TestList.get(i);
         mhm.put(result.getId(), result.getLob());
     }

     List list = (List) mhm.get("1");

     for(int i=0;i<list.size();i++){
         System.out.println(list.get(i));
     }

}   

}``

【讨论】:

【解决方案2】:

我会做以下事情:

  1. 使用 Map 而不是使用 List。
  2. 从 ServiceItem 中移除 lob。
  3. 覆盖 ServiceItem 的 equalshashCode 方法(以确保不会插入副本)。
  4. 在映射中插入新条目,其中键是此 ServiceItem,值是列表(如果 lob 是唯一的,则设置更好)。检查是否contains(ServiceItem) - 然后将新的 lob 添加到值的列表(集)中。

【讨论】:

    【解决方案3】:

    从您的列表中创建一个集合将删除重复项,例如:

    Set set = new HashSet(templist)
    

    【讨论】:

    • 好的,这里是解释。我的arraylist 的数据如下 APS | a.net/aps/| ABC APS|a.net/aps/|BCA 我想要一个最终列表,其中前三个值有一个条目,最后一个值为 abc,bca(可能是列表中的另一个列表)
    • @Rajesh,我仍然无法正确理解。你能编辑问题并格式化解释吗?一点代码会很有帮助。
    猜你喜欢
    • 2018-05-29
    • 2020-03-16
    • 2015-12-12
    • 1970-01-01
    • 2021-12-24
    • 2014-09-30
    • 2019-11-21
    • 2016-03-16
    • 2010-11-22
    相关资源
    最近更新 更多