gpt4 book ai didi

java - 从排序的 ArrayList 中删除重复项,同时保留重复项中的一些元素

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:38 32 4
gpt4 key购买 nike

好的,起初我认为这会非常简单。但我想不出解决这个问题的有效方法。我想出了一种蛮力的方法来解决这个问题,但这不是很优雅。我有一个数组列表。 Contacts 是一个 VO 类,它有多个成员——姓名、地区、ID。 ArrayList 中存在重复项,因为不同的区域出现了多次。该列表按 ID 排序。这是一个例子:

条目 0 - 姓名:John Smith;地区:N;编号:1
条目 1 - 姓名:John Smith;地区:兆瓦;编号:1
条目 2 - 姓名:John Smith;地区:S;编号:1
条目 3 - 姓名:Jane Doe;区域:NULL;编号:2
条目 4 - 姓名:Jack Black;地区:N;编号:3
条目 6 - 姓名:Jack Black;地区:兆瓦;编号:3
条目 7 - 姓名:Joe Don;地区:东北;编号:4

我想通过将相同 ID 的重复区域组合在一起来将列表转换为以下列表。因此,最终列表应该只有 4 个不同的元素和区域组合。

所以输出应该是这样的:-

条目 0 - 姓名:John Smith;地区:北、中、南;编号:1
条目 1 - 姓名:Jane Doe;区域:NULL;编号:2
条目 2 - 姓名:Jack Black;地区:北部、中西部;编号:3
条目 3 - 姓名:Joe Don;地区:东北;编号:4

您对解决此问题的最佳方法有何看法?我不是在寻找实际代码,而是在寻找以最佳方式完成它的想法或技巧。

感谢您的宝贵时间!!!

最佳答案

您可以在将它们转储(并合并重复项)到 TreeMap 中时迭代它们。然后根据 TreeMap 值的排序 View 创建一个列表。

在示例代码中,我假设您有一个带有 ID、名称和区域字段的 Entry 类,最后一个是区域实例列表。这可以很容易地更改为一个集合,并将区域更改为字符串或您正在使用的任何内容。该示例在将条目插入映射之前复制条目,因为它们在合并到其他条目时会被修改。

SortedMap<Integer, Entry> mergedEntriesMap = new TreeMap<Integer, Entry>();
for (Entry e : entries) {
if (mergedEntriesMap.contains(e.id)) {
Entry m = mergedEntriesMap.get(e);
m.regions.addAll(e.regions);
} else {
Entry m = new Entry();
// copy the entry to keep the original array clean
m.id = e.id;
m.name = e.name;
m.regions = new ArrayList<Region>(e.regions);
mergedEntriesMap.put(m.id, m);
}
}

List<Entry> mergedEntries = new ArrayList<Entry>(mergedEntriesMap.values());

关于java - 从排序的 ArrayList 中删除重复项,同时保留重复项中的一些元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405073/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com