如何使用Java集合为我的结果建模?

时间:2014-03-07 15:37:28

标签: java

我有一个使用Drools Expert评估某些规则的应用程序。结果将属于这种类型:

String, String, Integer

典型的结果示例是:

"Rule 1", "RED",   1
"Rule 2", "AMBER", 2
"Rule 3", "GREEN", 1
"Rule 4", "INFO",  3

第一个元素是一个键。所以我在考虑使用Map结构。最后一个字段是通过枚举指定的整数。我希望能够从这个结果列表中选择具有最大优先级的规则(这是最后一个字段)。

在使用Java集合库方面,最好的结构方法是什么?地图是最好的吗?

4 个答案:

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