gpt4 book ai didi

java - 如何检查对象数组中对象的重复值,合并重复值,然后删除重复值?

转载 作者:行者123 更新时间:2023-11-30 02:24:26 25 4
gpt4 key购买 nike

现在我有一个“龙”数组。每个项目都有两个值。 ID 和计数。所以我的数组看起来像这样:

Dragon[] dragons = { new Dragon(2, 4), 
new Dragon(83, 199),
new Dragon(492, 239),
new Dragon(2, 93),
new Dragon(24, 5)
};

如你所见,我的数组中有两条 ID 为 2 的龙。我想要完成的是,当发现重复项时,只需将重复项的计数添加到第一个项的计数中,然后删除重复的 Dragon。

我已经成功地完成了这个有点,但是我最终会在数组中间得到一个空值,并且我不知道如何删除空值然后对它们进行洗牌。

这是我到目前为止所拥有的,但它确实无法正常工作:

public static void dupeCheck(Dragon[] dragons) {
int end = dragons.length;
for (int i = 0; i < end; i++) {
for (int j = i + 1; j < end; j++) {
if (dragons[i] != null && dragons[j] != null) {
if (dragons[i].getId() == dragons[j].getId()) {
dragons[i] = new Item(dragons[i].getId(), dragons[i].getCount() + dragons[j].getCount());
dragons[j] = null;
end--;
j--;
}
}
}
}
}

最佳答案

您很可能不应该维护龙类本身中每条龙的龙数。

除此之外,即使您被迫使用数组,您也应该创建一个中间 map 来存储您的龙。

Map<Integer, Dragon> idToDragon = new HashMap<>();
for (Dragon d : yourArray) {
// fetch existing dragon with that id or create one if none present
Dragon t = idToDragon.computeIfAbsent(d.getId(), i -> new Dragon(i, 0));
// add counts
t.setCount(t.getCount() + d.getCount());
// store in map
idToDragon.put(d.getId(), t);
}

现在 map 包含龙的 ID 和龙之间的映射,并具有正确的计数。要从此 map 创建数组,您只需

Dragon[] newArray = idToDragon.values().toArray(new Dragon[idToDragon.size()]);

关于java - 如何检查对象数组中对象的重复值,合并重复值,然后删除重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46032245/

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