2016-04-08 16 views
2

でオブジェクトを追加するにはどのように私はこのようになりますDogArrayListを持って、のArrayList - 重複した値

ArrayList<Dog> array=new ArrayList<>(); 

    array.add(new Dog("one", 10)); 
    array.add(new Dog("two", 20)); 
    array.add(new Dog("one", 40)); 

クラスDogはそれらをマージしようとしているparameters.I'mとして文字列とダブルを取りますStringの値が重複しているArrayListオブジェクト。同時に、Doubleの値を追加する必要があります。したがって、この例では、私はすでに重複する値を持つオブジェクトを追加することができた。このように2犬のオブジェクトを持つことになり、新しいArrayListを、

Dog ("one", 50) 
Dog ("two", 20) 

を取得したいが、私は彼らのdouble型の値を追加することでトラブルを抱えています。助言がありますか?

+0

リストを繰り返します。この文字列を持つ犬はすでに存在しますか?整数を追加し、そうでない場合は犬を追加してください。 – Stultuske

+6

'Map 'のマップを使用します。ここで 'String'は犬の名前です。リストを使用すると、重複を処理するために多くの作業が必要になります。 – Tom

答えて

3

あなたはMap.mergeを使用して犬や再マッピング機能を組み合わせることができます。

Map<String,Dog> map = new HashMap<>(); 
array.stream().forEach(dog -> map.merge(dog.name, dog, (d1, d2) -> { 
    return new Dog(d1.name, d1.count + d2.count); 
})); 

ArrayList<Dog> mergedDogs = new ArrayList<>(map.values()); 
1

あなたはListのループで一つ一つを通過しながら、あなたがそれらが発生したとして、犬のオブジェクトを追跡するために地図を使用することができます。

List<Dog> array=new ArrayList<>(); 

array.add(new Dog("one", 10)); 
array.add(new Dog("two", 20)); 
array.add(new Dog("two", 120)); 
array.add(new Dog("one", 40)); 

Map<String, Dog> map = new HashMap<>(); //Map with key=StringField and value=Dog object 

for(Dog d : array){ 

    Dog dog = map.get(d.getStringField()); 
    if(dog != null){ //If dog object is already in map 
     dog.setDoubleField(dog.getDoubleField()+d.getDoubleField()); //add the double value of d to it. 
    }else{ 
     map.put(d.getStringField(), d); //add the dog object with key as stringField 
    } 
} 

System.out.println(Arrays.asList(map.values().toArray()));