【发布时间】:2014-02-21 20:12:22
【问题描述】:
我有两个具有以下结构的对象:
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 对象中的排名字段对这两个事件进行排序。由于标签是一个ArrayList,因此可以有多个等级,所以我想传递一个参数tagName,它将决定在不同的Tags 对象中比较哪些等级。
【问题讨论】:
-
这就是
Comparator接口的用途。实现一个Comparator<Event>,在比较两个Event对象时返回-1、0 或1。但是,您必须根据Tags对象中的排名字段来确定 的含义。每个Event可能包含多个Tags对象。另外,我们不会为您编写它。发布您到目前为止所写的内容。 -
实现自定义排序算法。
-
@nikpon 这在 Java 中是一个非常糟糕的建议。简单地实现 Comparator 更加标准,可能更少的错误,更少的测试。
-
@nikpon 好的,可能性能也较差,但这也需要测试。所以我仍然不建议使用自定义排序算法。这不是 O(1) 排序算法的用例之一。
-
@nikpon 这里的问题是“如何编写一些代码来基于一些
tagName比较两个Event对象”?而不是“如何对Event的列表进行排序?......要执行任何类型的排序,您首先应该有一种方法来比较两个相似的对象。使用哪种排序算法是下一个问题。
标签: java arrays sorting comparator comparable