2016-12-05 12 views
0

を合計私はMyClass.MyStringに基づいてArrayListの<MyClass>をフィルタリングし、MyClass.MyCount

public class MyClass { 
String myString; 
int myCount; 

public MyClass() { 
} 

public MyClass(String myString, int myCount) { 
    super(); 
    this.myString = myString; 
    this.myCount = myCount; 
} 

public String getMyString() { 
    return myString; 
} 

public void setMyString(String myString) { 
    this.myString = myString; 
} 

public int getMyCount() { 
    return myCount; 
} 

public void setMyCount(int myCount) { 
    this.myCount = myCount; 
}} 

としてBeanクラスMyClassをした私は

MyClass obj1 = new MyClass("1-ABC_2-PQR_1-PQR_1-DEF", 4); 
    MyClass obj2 = new MyClass("1-ABC_2-PQR_3-XYZ_1-PQR_1-DEF", 12); 
    MyClass obj3 = new MyClass("1-ABC_1-PQR_1-DEF", 3); 
    MyClass obj4 = new MyClass("3-ABC_2-PQR_1-DEF", 3); 
    ArrayList<MyClass> rawList = new ArrayList<MyClass>(); 
    rawList.add(obj1); rawList.add(obj2); rawList.add(obj3); rawList.add(obj4); 

としてのArrayListを持っています全体のArrayList私はMyClass.myStringを反復して選択し、それらを調整してそれぞれのオブジェクトに戻す選択基準に基づいています。その後、あるオブジェクトのmyStringが他のオブジェクトのmyStringと一致する場合、それらのオブジェクトの両方にMyClass.myCountを追加してオブジェクトの1つを削除する必要があるNew ArrayListを作成する必要があります。私が撮影した値で例えば

1-ABC_1-PQR_1-DEFとしてobj1.getMyString()マッチobj3.getMyString()を調整した後、私はobj1.getMyCount()obj3.getMyCount()を追加して、新しいArrayListの中で唯一のそれらのを保存する必要がある場合。

私はこれを次のようにしていますが、これを行うには効率的で失敗する方法を得たいと考えています。

int j = 0; 
      if (rawList.size() > 0) 
       list.add(rawList.get(0)); 
      for (int i = 1; i < rawList.size(); i++) { 
       if (rawList.get(i).getMyString() 
         .equals(list.get(j).getMyString())) { 
        list.get(j).setMyCount(
          list.get(j).getMyCount() 
            + rawList.get(i) 
              .getMyCount()); 
       } else { 
        j++; 
        list.add(rawList.get(i)); 
       } 
      } 
+0

'「私は特定の方法でこれをやっているが、私は効率的に取得し、これを行うための証明方法を失敗することを望んでいます。」' - 私たちにあなたの道を見せて、あなたがそれを持っているかもしれない問題を教えてください。また、MyClassのArrayListではなく、 'Map 'を使いたいと思うようです。 –

+0

私はそれをやっている方法を追加しました。チェックしてください。 @HovercraftFullOfEels –

+0

ところで、myStringによってソートされたrawListですか? –

答えて

0

私はあなたがマップを使用することができると思います:

Map<String,MyClass> map = new LinkedHashMap<>(); 
    for (MyClass obj: rawList) { 
     MyClass other = map.get(obj.getMyString()); 
     if (other != null) { 
      other.setMyCount(other.getMyCount() + obj.getMyCount()); 
     } else { 
      map.put(obj.getMyString(), obj); 
     } 
    } 
    List<MyClass> list = new ArrayList<>(map.values()); 
関連する問題