list里面有多条数据,我现在只想保留其中一条优先级最高的,举例说明:如果list里面包含A则返回A,如果没有A则去找有没有B,有就返回B,没有继续找有没有C。。。
时间: 2024-03-04 17:48:03 浏览: 133
你可以通过自定义一个比较器,然后对 list 进行排序,最后取出优先级最高的那条数据。如果优先级相同,则按照在 list 中的顺序来确定哪条数据优先。
假设你的数据类型为 `MyData`,`MyData` 类中包含一个 `priority` 字段表示优先级,那么你可以这样实现:
```java
// 自定义一个比较器
class PriorityComparator implements Comparator<MyData> {
private List<Priority> priorityList;
public PriorityComparator(List<Priority> priorityList) {
this.priorityList = priorityList;
}
@Override
public int compare(MyData o1, MyData o2) {
int index1 = priorityList.indexOf(o1.getPriority());
int index2 = priorityList.indexOf(o2.getPriority());
if (index1 != index2) {
return index1 - index2;
} else {
return o1.compareTo(o2);
}
}
}
// 假设你有一个 List<MyData> 数据集合和一个优先级列表
List<MyData> dataList = ...
List<Priority> priorityList = Arrays.asList(Priority.A, Priority.B, Priority.C);
// 根据优先级排序,只保留一条优先级最高的数据
PriorityComparator comparator = new PriorityComparator(priorityList);
dataList.sort(comparator);
MyData result = dataList.get(0);
```
在这个例子中,我们自定义了一个 PriorityComparator 类实现 Comparator 接口,重写 compare 方法用于根据优先级进行排序。我们使用 priorityList 来表示优先级的顺序,`indexOf()` 方法可用于查找元素在列表中的索引。如果两个元素的优先级不同,则根据优先级在 priorityList 中的索引来确定哪个元素更优先。如果两个元素的优先级相同,则按照在 dataList 中的顺序来确定哪个元素优先。
最后,我们使用 sort 方法对 dataList 进行排序,然后取出排序后的第一条数据,即优先级最高的那条数据。
值得注意的是,如果要对对象进行排序,对象需要实现 Comparable 接口或自定义 Comparator。在 MyData 类中实现 Comparable 接口也可以达到同样的效果。
阅读全文