基于对象列表中List内的字段对对象列表进行排序

时间:2014-02-21 20:12:23

标签: java arrays sorting comparator comparable

我有两个具有以下结构的对象:

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个对象中比较哪些排名。

1 个答案:

答案 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"));