2016-09-27 13 views
-1

私は「カメラのフラッシュ障害のある」と「破損したカメラハウジング」でそれをリストに変換したい表示の重複は一度Javaオブジェクトリスト内の属性値を

enter image description here

以下のようにJavaオブジェクトのリストを持っています以下のように、最初のオブジェクトに対して1回だけ実行します。

enter image description here

ここで言及した溶液を用いて行うことができるものはありますか? Remove duplicates from a list of objects based on property in Java 8

+2

ユニークな値を持つコレクションは、あなたがセットを探していることを示唆しています: 'new HashSet <>(リスト)' – nbrooks

+2

なぜ最初の属性をクリアしたいですか?それはあなたを悩ませますか?どの問題がその背後にある?それは[XY問題](http://xyproblem.info/)の良い候補のように見えます。 – Spotted

+1

あなたは実際に、1つのリスト内の位置に応じてそのようにオブジェクトを修正することをお勧めしますか?これらのオブジェクトが別のリストにも異なる順序で含まれている場合はどうなりますか?最初のオブジェクトをリストから削除するとどうなりますか? – Holger

答えて

0

Employeeの例では、いくつかの重複IDがあります。

あなたは重複を許可しないHashSet、にそれらを追加

List<Employee> employee 

としてリストを持っているとしましょう。

HashSet<Object> seen=new HashSet<>(); 
employee.removeIf(e->!seen.add(e.getID())); 
+0

FallAndLearn 1890●1●3●15 \t \t をグループ化されます私が投稿しました。それらのオブジェクトが重複していることを意味するものではなく、異なる値を持つ可能性があるより多くの属性を持っています – Nevin

1

値がセット内にすでにある場合は、(セットは重複を許可しない)Setにfalseを返すadd方法をすべてのプロパティを追加することができますので、あなたがプロパティを空に設定することができます目的:

Set<String> values = new HashSet<>(); 
for (MyObject obj : myList) { 
    if (!values.add(obj.getValue())) { 
     obj.setValue(""); 
    } 
} 

別の代替は、各グループの最初の要素をスキップし、グループ内の他のすべてのオブジェクトのために空に属性値を設定し、グループに同じ属性値を持つすべてのオブジェクトである:

myList.stream() 
     .collect(Collectors.groupingBy(MyObject::getValue)) 
     .forEach((k, v) -> v.stream().skip(1).forEach(o->o.setValue(""))); 
+0

David、2番目の解決策は私に望ましい方法で最初の列のリストを取得していますが、データベースをフェッチしなくても、そのリストを使用しようとすると、テーブルまたはビューが存在しません。フェッチ後にリストを処理しています。 – Nevin

関連する問題