我面临着相当复杂的任务(至少对我而言)。假设我们有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. 从Python列表中删除重复项
- 2. 从Django列表中删除重复项
- 3. 从Python列表中删除重复项
- 4. 从C++列表中删除重复项
- 5. Python从列表中删除重复项?
- 6. 从HashMap条目列表中删除重复项
- 7. 如何从列表中删除重复条件,underscore.js?
- 8. 如果符合条件,从列表中删除重复的值
- 9. 从阵列中删除重复项
- 10. 从散列中删除重复项?
- 11. 删除列表中的重复项
- 12. odoo one2many列表中删除重复项
- 13. 删除列表中的重复项
- 14. C#从包含列表的列表中删除重复项
- 15. 删除重复的列表项从列表的列表清单
- 16. 根据条件删除重复项
- 17. 从列表中删除重复的豆
- 18. 如何从列表中删除重复
- 19. 删除条件重复值
- 20. 如何从数组列表中删除重复条目
- 21. 删除带条件的重复条目列表R
- 22. 根据C#中的条件删除列表<T>中的重复项
- 23. 从React项目中删除重复项
- 24. 添加之前删除链接列表中的重复项 - C
- 25. 在Java中,从文件列表中删除重复的文件
- 26. 如何从列表中删除连续的重复项?
- 27. Java ArrayList从两个列表中删除重复项
- 28. 以不同的方式从列表中删除重复项
- 29. 从列表中删除重复的项目
- 30. 从列表中删除子集和重复项?
哇!在6个月的Java之后,我仍然不使用流。肯定会深入它,因为它提供了如此广泛的功能。 – Russiancold
@Russiancold Yup,流很棒!肯定有一个学习曲线,但你不会后悔投资。 – shmosel