私はかなり洗練された仕事に直面しています(少なくとも私にとって)。 List<E>
、E
には2つのフィールドA
とB
があるとします。リストに重複がある可能性があります。 E
のインスタンスをA
フィールドで重複して削除し、そのうちの最も多くのインスタンスをB
にする必要があります(これをプリミティブのように比較できます)。
例:
入力:[{1; 1}, {1; 2}, {3; 4}, {3; 3}, {3; 1}, {2; 2}]
出力:私の心に来た[{1; 2}, {3; 4}, {2; 2}]
まず最初はただ、ネストされたループfor
、thisのようなものを使用することです。しかしまず第一に、ループ内のリストのノードを削除するとうまくいくかどうかはわかりません。第2に、内部全体をリストではなく、外側のイテレータからリストの最後まで繰り返すことをお勧めします。この場合、外側のイテレータは「小さい」と内側のイテレータであることがわかるかもしれないので、削除する必要がありますそれはループを傷つけるかどうかは分かりません。
私は一言で言えば、for
ループで信頼性の高いコードを書くことができますか、どのように実装するか、他のどのようなデザインが好きでしょうか。追加の条件でリストから重複を削除する
2
A
答えて
3
ストリームを使用します。いくつかのダミータイプの定義から始めましょう:List<E> list
があるとしましょう。あなたはストリーミングと収集最大B
を持つ要素を、A
によってグループ化して、ちょうどマップの値をつかむことができます。
Collection<E> maxB = list.stream()
.collect(Collectors.groupingBy(E::getA,
Collectors.collectingAndThen(
Collectors.maxBy(Comparator.comparing(E::getB)),
Optional::get)))
.values();
1
今日私がリストについて学んだことの1つは、アイテムを削除したい場合はリストを逆向きに繰り返すことです。この方法では、範囲外の例外を避けることができます。 そうでなければ、私はループのためにそれをするだろう、より良いアイデアatmを持っていない。
+0
あなたには、いくつかの実装を提供することができますか?私のために入れ子にしてどのように後方に反復するのかは明らかではありません。これに対してカスタムIteratorを作成する必要がありますか? – Russiancold
関連する問題
- 1. リストから重複を削除するC#の条件に基づいての条件に基づいて
- 2. 条件付き重複行の削除
- 3. 特定の重複データを条件付きで削除する
- 4. 複数の条件から削除
- 5. 複数の条件で重複を削除
- 6. 条件javaで重複リストオブジェクトを削除する
- 7. 条件付きで重複を削除するR
- 8. リスト(Of T)から重複を削除
- 9. R(20K観測)の重複を条件付きで削除
- 10. リストのリストから重複を削除しますか?
- 11. 条件を使用して重複を削除します
- 12. 条件付きリストから項目を削除する
- 13. 条件に基づいてXMLファイルから重複エントリを削除します。
- 14. リスト内の重複を削除する
- 15. リスト内の重複を削除する
- 16. リストからすべての重複を削除する方法
- 17. MVCのリストから重複するタイトルを削除します
- 18. C#フィールドに基づいてデータテーブル重複を削除し、条件
- 19. 条件付き重複行全体の削除
- 20. リストから重複する要素を削除する
- 21. リストから重複する要素を削除する
- 22. Pythonの問題リストから重複を削除する
- 23. スキーム内の交差リストから重複を削除する
- 24. VBA行の削除条件を追加します。
- 25. リストから重複する項目を削除します
- 26. リストから重複したマッチを削除する
- 27. リストから重複した文字列を削除する
- 28. リストから重複を削除するより速い方法
- 29. リストから重複を削除する方法
- 30. リストから重複を削除するC#メソッド<T>
うわー! Javaの6ヶ月後、私はまだストリームを使用しません。幅広い機能を提供しているので、間違いなく深く入ります。 – Russiancold
@Russiancoldはい、ストリームは素晴らしいです!間違いなく学習曲線ですが、投資を後悔することはありません。 – shmosel