我有一个使用Drools Expert评估某些规则的应用程序。结果将属于这种类型:
String, String, Integer
典型的结果示例是:
"Rule 1", "RED", 1
"Rule 2", "AMBER", 2
"Rule 3", "GREEN", 1
"Rule 4", "INFO", 3
第一个元素是一个键。所以我在考虑使用Map结构。最后一个字段是通过枚举指定的整数。我希望能够从这个结果列表中选择具有最大优先级的规则(这是最后一个字段)。
在使用Java集合库方面,最好的结构方法是什么?地图是最好的吗?
答案 0 :(得分:3)
我希望能够从这个结果列表中选择具有最高优先级的规则(这是最后一个字段)。
您可以将数据打包到基于最后一个字段的可比较的类中,然后使用PriorityQueue
。
class Data implements Comparable<Data> {
private String rule;
private String other;
private int priority;
...
@Override
public int compareTo(Data other) {
return Integer.compare(priority, other.priority);
}
}
现在,您可以使用PriorityQueue<Data>
。
答案 1 :(得分:0)
Queue<Result> resultList = new PriorityQueue<Result>();
public class Result implements Comparable<Result>{
private String ruleText;
private String text; // 2. value
private int priority;
@Override
public int compareTo(Result result) {
return new Integer(priority).compareTo(result.getPriority());
}
public String getRuleText() {
return ruleText;
}
public void setRuleText(String ruleText) {
this.ruleText = ruleText;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getPriority() {
return priority;
}
public void setPriority(int priority) {
this.priority = priority;
}
}
答案 2 :(得分:0)
如果您的数据收集中有关键字,那么地图最适合存储。要确定优先级,最好使用PriorityQueue。
答案 3 :(得分:0)
最好的方法是创建一个实现可比较的Object。
class Rule implements Comparable<Rule>{
String firstPart;
String secondPart;
int priority;
//constructor
//getters and setters
@Override
public int compareTo(Rule other){
return Integer.compare(this.priority, other.priority);
}
}
然后你只需将它们全部放在TreeSet<Rule>
中并对其进行迭代,它们就会排序。或者您可以将它们存储在列表中并致电Collections.sort(list)
。