我有两个具有以下结构的对象:
public class Event{
private String name;
private int id;
private List<Tags> tags;
}
public class Tags{
private String tagName;
private int rank;
}
我有Event
个对象的列表
List<Event> events = new ArrayList<Event>();
我想根据Tags
对象中的排名对事件进行排序。
例如,
Tags tag1 = new Tags("web", 1);
Tags tag2 = new Tags("mobile", 7);
List<Tags> tags = new ArrayList<Tags>();
tags.add(tag1);
tags.add(tag2);
Event event1 = new Event("test1",4242432, tags);
Tags tag3 = new Tags("web", 2);
Tags tag4 = new Tags("mobile", 8);
List<Tags> tags1 = new ArrayList<Tags>();
tags.add(tag3);
tags.add(tag4);
Event event2 = new Event("test2",546423, tags1);
所以现在我想根据Tags
对象中的rank字段对这两个事件进行排序。由于标签是ArrayList
,因此可以有多个排名,因此我想传递一个参数tagName
,它将决定在不同的Tags
个对象中比较哪些排名。
答案 0 :(得分:3)
使用java.lang.Comparator
界面。
public class EventComparator implements Comparator<Event> {
private String tagName;
public EventComparator(String tagName) {
this.tagName = tagName;
}
@Override
public int compare(Event e1, Event e2) {
Tag t1 = getTag(e1, tagName); // getTag(...) returns the e1's tag with name 'tagName'
Tag t2 = getTag(e2, tagName);
// Ignoring null check for brevity
if (t1.getRank() > t2.getRank())
return 1;
else if (t1.getRank() < t2.getRank())
return -1;
else
return 0;
}
}
<强>用法:强>
Collections.sort(eventsList, new EventComparator("web"));
Collections.sort(eventsList, new EventComparator("mobile"));