【问题标题】:Java remove duplicate occurance of object from ArrayList and make it uniqueJava从ArrayList中删除重复出现的对象并使其唯一
【发布时间】:2016-12-23 12:26:42
【问题描述】:

我遇到了 ArrayList 的问题。我正在使用以下方法填充 Arraylist。

private void fillData() {
    mArrayList = new ArrayList<>();
    DemoTestBean bean = new DemoTestBean();
    bean.id = "1";
    bean.name = "Test1";
    bean.percentage = 20;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "1";
    bean.name = "Test2";
    bean.percentage = 30;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "1";
    bean.name = "Test3";
    bean.percentage = 50;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "2";
    bean.name = "Test4";
    bean.percentage = 40;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "4";
    bean.name = "Test5";
    bean.percentage = 55;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "5";
    bean.name = "Test6";
    bean.percentage = 25;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "6";
    bean.name = "Test7";
    bean.percentage = 60;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "6";
    bean.name = "Test8";
    bean.percentage = 40;
    mArrayList.add(bean);
}

现在我只想添加一次重复的对象。但是当我发现重复的 id 时,我需要将百分比值相加并将其合并为一个。所以新数组如下所示:

private void fillData() {
    mArrayList = new ArrayList<>();
    DemoTestBean bean = new DemoTestBean();
    bean.id = "1";
    bean.name = "Test1";
    bean.percentage = 100;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "2";
    bean.name = "Test2";
    bean.percentage = 40;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "4";
    bean.name = "Test3";
    bean.percentage = 55;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "5";
    bean.name = "Test4";
    bean.percentage = 25;
    mArrayList.add(bean);

    bean = new DemoTestBean();
    bean.id = "6";
    bean.name = "Test5";
    bean.percentage = 100;
    mArrayList.add(bean);
} 

这意味着我们有 3 个 id 为 1 的重复对象,在新数组中,我们需要对所有具有相同 id 的百分比值求和,并将其视为一个对象。所以我们的新数组列表就是这样构建的。 但我不知道我怎么能弄清楚这个问题。请帮帮我。

【问题讨论】:

  • 想想哪个 Collection 实现可能更适合这个目的。提示:哪个实现不允许重复?

标签: java android sorting arraylist collections


【解决方案1】:

最简单的方法是将List 转换为支持唯一性的不同集合类型。这是Set的任何实现

【讨论】:

    【解决方案2】:

    你可以这样做:

    public void add(DemoTestBean testBean)
    {
        DemoTestBean bean = find(list,testBean.getId());
        if(bean!=null)
             bean.setPercentage(bean.getPercentage()+testBean.getPercentage());
        else
             list.add(testBean);
    }
    

    public DemoTestBean find(List<DemoTestBean> list, int id)
    {
        for(DemoTestBean bean:list)
        {
            if(bean.getId() == id)
                return bean;
        }
        return null;
    }
    

    我把find的实现留给你。

    【讨论】:

    • 如何实现“查找”方法。请给我这个逻辑。
    猜你喜欢
    • 2023-03-03
    • 2013-12-14
    • 2017-08-02
    • 2013-12-24
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多