1

I have a trouble with ArrayList. I am filling Arraylist with following method.

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);
}

Now I want to add duplicate object only once. But when I find duplicate id, I need to sum of percentage value and combine it to one. So new array will look alike as below:

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);
} 

That means we have 3 duplicated objects having id 1 and in new array we need to sum of all percentage value which have same id and consider it as a one object. So our new arraylist build like this way. But i don't know how can I figured out this problem. Please help me.

1
  • Think which Collection implementation may be more suitable for that purpose. Hint: Which implementation does not allow duplicates? Commented Dec 23, 2016 at 12:31

2 Answers 2

3

easiest way is to convert the List into a different Collection type that supports uniqueness. This is any implementation of Set

Sign up to request clarification or add additional context in comments.

Comments

3

You can do as following:

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;
}

I leave the implementation of find to you.

1 Comment

how can I implement "find" method. Please give me that logic.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.