在java中实现COMPARATOR

时间:2013-07-22 06:52:18

标签: java collections arraylist comparator

我是java新手并帮助实现Comparator。 我有一个类型为QualityData的Arraylist,其值如下。

**Sequence Nr**  **Súb Sequence_nr** **flag**
        100             1              True
        100             1              False
        101             1              True
        100             2              False
        100             1              False
        100             3              True

所需的输出顺序:基于Sequence_Nr和Sub_sequence_nr的顺序。

  **Sequence Nr**  **Súb Sequence_nr**  **flag**
         100              1               True
         100              1               False
         100              1               False
         100              2               False
         100              3               True
         101              1               True

我有一个带有Sequence_number,sub_sequence_number和布尔标志的类。

public class QualityData{
private int sequence_number;
private int sub_sequence_nr;
private boolean flag; 
//GETTER, SETTER METHODS
public static Comparator<QualityData> COMPARATOR=new Comparator<QualityData>(){
    public int compare(QualityData data1, QualityData data2){
        return int (data1.getSequence_nr()-data2.getSequence_nr());
    }
};
}

我打电话给:

List<QualityData> qData= ie.getQualityData();
Collections.sort(qData,QualityData.COMPARATOR);

这里,我已经基于sequence_number实现了比较器但是我希望它基于sequence_number和sub_sequence_nr。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:3)

我不是在这里发布完全正常工作的解决方案,但这将完全了解您的需求以及如何解决它

       public static Comparator<QualityData> COMPARATOR=new Comparator<QualityData>(){
            public int compare(QualityData data1, QualityData data2){
                if((data1.getSequence_nr()-data2.getSequence_nr() == 0)){
                    if(data1.getSubSequence_nr()-data2.getSubSequence_nr() == 0){
                        if(data1.getFlag()){
                           return 1;    
                        }else{
                            return -1;
                        }
                    }else{
                        return data1.getSubSequence_nr()-data2.getSubSequence_nr();
                    }
                }else {
                    return data1.getSequence_nr()-data2.getSequence_nr();
                }
            }
        };
        }

答案 1 :(得分:0)

您需要在使用Comparator

时使用Collections.sort(collection, comparator);

另见