我面臨着相當複雜的任務(至少對我而言)。假設我們有List<E>
,E
有兩個字段A
和B
。列表可能有重複。我們需要刪除由A
字段複製的E
的實例,並留下那個具有最多B
(假設我們可以將它比作一些原語)的實例。
例子:
輸入:[{1; 1}, {1; 2}, {3; 4}, {3; 3}, {3; 1}, {2; 2}]
輸出:已經來到我的腦海[{1; 2}, {3; 4}, {2; 2}]
第一件事就是使用嵌套循環for
,像this。但首先,我不確定刪除循環內的列表節點將工作正常。其次,最好使內部for
不是遍歷整個列表,而是從外部迭代器到列表的末尾進行迭代,在這種情況下,我們可能會發現外部迭代器是「較小」的,然後是內部迭代器,所以我們需要刪除它,並且我不確定它是否會損害循環。
所以我的問題簡而言之是:我們能否使用for
循環編寫可靠的代碼,以及如何實現它,或者您更喜歡哪種設計。從附加條件列表中刪除重複項
2
A
回答
3
我會使用流。讓我們從一些虛擬類型定義開始吧:
interface E {
A getA();
B getB();
}
interface A {}
interface B extends Comparable<B> {}
現在假設您有一些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
今天我學到了一件關於列表的一件事情,就是如果你想刪除一個項目,就通過列表向後迭代。這樣你可以避免indexofofrange異常。 否則我會用for循環做,不要有更好的主意atm。
+0
你能提供一些實施?這對我來說並不明顯,我將如何向後迭代嵌套for。我應該爲此創建自定義迭代器嗎? – Russiancold
相關問題
- 1. 從C++列表中刪除重複項
- 2. Haskell從列表中刪除重複項
- 3. 從列表中刪除重複項
- 4. Scala - 從列表中刪除重複項
- 5. 從Django列表中刪除重複項
- 6. 從Python列表中刪除重複項
- 7. 從Python列表中刪除重複項
- 8. 從列表中刪除重複項?
- 9. Python從列表中刪除重複項?
- 10. 從HashMap條目列表中刪除重複項
- 11. 如果符合條件,從列表中刪除重複的值
- 12. 如何從列表中刪除重複條件,underscore.js?
- 13. 從陣列中刪除重複項
- 14. 從陣列中刪除重複項
- 15. 從散列中刪除重複項?
- 16. 刪除列表中的重複項目
- 17. 刪除Haskell列表中的重複項
- 18. 刪除列表中的重複項
- 19. odoo one2many列表中刪除重複項
- 20. 刪除列表中的重複項
- 21. Python刪除列表中的重複項
- 22. 刪除列表中的重複項-linq
- 23. 刪除列表中的重複項(c#)
- 24. 從列表中刪除重複項並保留列表
- 25. C#從包含列表的列表中刪除重複項
- 26. 從列表中刪除某些項目重複的列表
- 27. SharePoint 2013列表:從列表視圖中刪除重複項
- 28. 刪除重複的列表項從列表的列表清單
- 29. 從mysql表中刪除重複項?
- 30. 從表中刪除重複項
哇!在6個月的Java之後,我仍然不使用流。肯定會深入它,因爲它提供瞭如此廣泛的功能。 – Russiancold
@Russiancold Yup,流很棒!肯定有一個學習曲線,但你不會後悔投資。 – shmosel