我正在编写一个Java代理,它从程序中的各种其他对象接收对其服务的请求。限制是一次只能执行一个进程,这意味着PriorityQueue可能是表示服务请求的最佳方式。具有复杂枚举的优先队列?
不幸的是,这些进程存储为具有许多不同状态的枚举。有没有简单的方法来编写一个比较器,以我想要的方式排列这些状态?也就是说,
public enum AgentProcess
{
ACTION1, ACTION2, ACTION3, ACTION4, ACTION20
}
一些比较
public class ProcessComparator<Process>
{
public int compare(Process a, Process b)
{
//some arbitrary ordering of the processes, e.g., ACTION3 > ACTION19 > ACTION4...
}
}
我目前坚持做这样的事情
public static int getValue(Process p)
{
switch(p)
case ACTION1:
return 5;
case ACTION2:
return 29;
case ACTION3:
return 18;
//etc
}
有没有一种方法我可以重写我的枚举,使其自然订购,而不必为每个定义重量或开关?
因此,如果我使用自然顺序,比较工作在哪个方向进行?也就是说,如果它们在Enum中列为“ACTION1,ACTION2,ACTION3”,它是指ACTION1> ACTION2> ACTION3或ACTION1
donnyton
2011-03-04 06:24:08
这取决于你的比较器。返回a.ordinal() - b.ordinal();将它们命令为ACTION1,ACTION2,...和b.ordinal() - a.ordinal()进行反向排序。 – msell 2011-03-04 06:31:33
PriorityQueue的默认构造函数说它按自然顺序对它们进行排序。这个订单是最小的吗?也就是说,在上面的列表中,默认情况下ACTION1在ACTION3前面走在ACTION3前面? – donnyton 2011-03-05 06:27:06