gpt4 book ai didi

Java TreeSet 比较器

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

我有一个包含以下字段的 Vehicle 类:baseVehicleId、subModelId、notes 和 partNo

如果 baseVehicleId、subModelId 和 partNo 相同,我希望保留最长音符的对象(并删除其他对象)

我有这个:

Comparator<Vehicle> comparator = new Comparator<Vehicle>() {
@Override
public int compare(Vehicle a, Vehicle b) {
if(a.baseVehicleId().equals(b.baseVehicleId()) && String.valueOf(a.subModelId ()).equals(String.valueOf(b.subModelId ()))
&& String.valueOf(a.partNo ()).equals(String.valueOf(b.partNo ()))
))
return a.getOurnotes().compareTo(b.getOurnotes());
// not good I know
return 1;
}
};

TreeSet<Vehicle> treeSet = new TreeSet<Vehicle>(comparator);

我如何修改这段代码:/?因此,例如,如果我让所有字段都相等并且注释的长度更长,则删除其他对象。

最佳答案

比较器的工作只是说出两个对象中哪一个先出现——在比较过程中没有机制来操纵底层集合。我想您会想以稍微不同的方式来考虑这个问题:在将对象添加到您的集合之前执行您的过滤逻辑。

为了简单起见,我建议只使用标准列表,例如 ArrayList。此外,您还需要重写 Vehicle 类中的 equals() 方法,如果两辆 Vehicle 共享相同的 ID 和零件号,该方法返回 true

在添加新车辆时,您可以这样做:

int vehicleIndex = myvehicles.indexOf(vehicle) // -1 if missing, otherwise 0 or greater to represent the index position

if (vehicleIndex == -1) {
// No item in the list shares the ids/model/part numbers so can add
myvehicles.add(vehicle)
} else {
// There's another similar vehicle, better compare their notes:
Vehicle existingVehicle = myvehicles.get(vehicleIndex); // retrieve the object from list so that we can compare it

// check if the new vehicle has longer notes
if (vehicle.getOurNotes().length > existingVehicle.getOurNotes().length) {
// if it does, remove the old one from the list
myvehicles.remove(vehicleIndex);
// and add the new one. Effectively we've done a replacement
myvehicles.add(vehicle)
}
}

显然它不会自动排序,但您可以在添加一批项目后通过运行 Collections.sort() 来执行此操作方法也接受比较器,但这次您的比较器可以专注于详细说明排序的特定任务,因为您知道列表已预先过滤,因此您不必担心尝试过滤掉项目。

关于Java TreeSet 比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22450027/

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