我正在編寫一個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