2016-12-23 18 views
1

ArrayListに問題があります。私は次の方法でArraylistを満たしています。Javaが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); 
} 

ここでは、重複オブジェクトを1回だけ追加したいと思います。しかし、重複IDが見つかると、パーセンテージの値を合計して1にする必要があります。だから、新しい配列は、以下のように似てます:

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

我々は、ID 1を持つ3つの重複オブジェクトを持っているし、新しい配列に、我々は同じIDを持つすべてのパーセント値の合計と、1つのオブジェクトとしてそれを考慮する必要がありますことを意味します。だから私たちの新しいarraylistはこのように構築されます。 しかし、私はこの問題をどのように把握できるのか分かりません。私を助けてください。

+0

どのコレクション実装がその目的に適しているかも考えてください。ヒント:重複を許可しない実装はどれですか? –

答えて

3

最も簡単な方法は、Listを一意性をサポートする別のコレクションタイプに変換することです。

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の実装を残す:これは、あなたが以下のように行うことができますSet

3

の任意の実装です。

+0

どのように "find"メソッドを実装できますか?その論理を教えてください。 – Philliphe

+0

を参照してください。 'find'メソッドが追加されました。 – Azodious

関連する問題