使用比较器基于两个元素的Java列表嵌套排序

使用比较器基于两个元素的Java列表嵌套排序,java,list,sorting,comparator,Java,List,Sorting,Comparator,我有一个java列表,在添加对象后需要对其进行排序。对象有三个元素。一个字符串和两个整数。课程安排如下:- public class ValueWords implements Comparable<ValueWords>{ //............................................. public static final Comparator<ValueWords> valComparator = new Comparator&l

我有一个java列表,在添加对象后需要对其进行排序。对象有三个元素。一个字符串和两个整数。课程安排如下:-

public class ValueWords implements Comparable<ValueWords>{

//.............................................

public static final Comparator<ValueWords> valComparator = new Comparator<ValueWords>()
 {@Override
    public int compare(ValueWords v1, ValueWords v2) {
        return v1.valWord   - v2.valWord; }
   }
};
//....................................................................
private String strWord;
private int valWord;
private int phraseWord;
public int getPhraseWord() {
    return phraseWord;}
public void setPhraseWord(int phraseWord) {
    this.phraseWord = phraseWord;}
public String getStrWord() {
    return strWord;}
public void setStrWord(String strWord) {
    this.strWord = strWord;}
public int getValWord() {
    return valWord;}
public void setValWord(int valWord) {
    this.valWord = valWord;}
public ValueWords() {}

@Override
public int compareTo(ValueWords arg0) {
    // TODO Auto-generated method stub
    return 0;}
//..............................................
}
 ---------------------------------------------
   strWord     valWord      phraseWord
   abcd          0             1
   abcde         0             0
   mns           1             2 
   efgh          1             1
   xyz           2             2
   zxx           2             0
  --------------------------------------------
它给我的排序列表如下:-

public class ValueWords implements Comparable<ValueWords>{

//.............................................

public static final Comparator<ValueWords> valComparator = new Comparator<ValueWords>()
 {@Override
    public int compare(ValueWords v1, ValueWords v2) {
        return v1.valWord   - v2.valWord; }
   }
};
//....................................................................
private String strWord;
private int valWord;
private int phraseWord;
public int getPhraseWord() {
    return phraseWord;}
public void setPhraseWord(int phraseWord) {
    this.phraseWord = phraseWord;}
public String getStrWord() {
    return strWord;}
public void setStrWord(String strWord) {
    this.strWord = strWord;}
public int getValWord() {
    return valWord;}
public void setValWord(int valWord) {
    this.valWord = valWord;}
public ValueWords() {}

@Override
public int compareTo(ValueWords arg0) {
    // TODO Auto-generated method stub
    return 0;}
//..............................................
}
 ---------------------------------------------
   strWord     valWord      phraseWord
   abcd          0             1
   abcde         0             0
   mns           1             2 
   efgh          1             1
   xyz           2             2
   zxx           2             0
  --------------------------------------------
我想要一个嵌套排序,如:-

  ---------------------------------------------
   strWord     valWord      phraseWord
   abcde        0             0
   abcd         0             0
   efgh         1             1 
   mns          1             2
   zxx          2             0
   xyz          2             2
  --------------------------------------------

我做了一些徒劳的尝试,但对java还是新手。它们不起作用。它们是安静的原语,可以放在这里。

尝试更改比较器以检查两个值:

public static final Comparator<ValueWords> valComparator = new Comparator<ValueWords>() {
    @Override
    public int compare(ValueWords v1, ValueWords v2) {
        if(v1.valWord == v2.valWord)
            return v1.phraseWord - v2.phraseWord;
        else 
            return v1.valWord - v2.valWord;
    }
};
公共静态最终比较器valComparator=新比较器(){
@凌驾
公共整数比较(ValueWords v1,ValueWords v2){
if(v1.valWord==v2.valWord)
返回v1.phraseWord-v2.phraseWord;
其他的
返回v1.valWord-v2.valWord;
}
};

您可以在一个比较器中组合这两种功能:

public static final Comparator<ValueWords> valComparator = new Comparator<ValueWords>()
{
    @Override
    public int compare(ValueWords v1, ValueWords v2) {
        int result = Integer.compare(v1.valWord, v2.valWord);
        return result == 0 ? Integer.compare(v1.phraseWord, v2.phraseWord) : result;
    }
};

现在还不清楚你希望事情是如何分类的,显然是按照valWord,然后是短语词,然后是strWord?似乎很简单。先生,先用valWord然后用短语。做第一个比较。如果它们不相等,则返回比较结果。如果它们相等,则返回第二次比较的结果。使用
Integer.compare
而不是仅对整数进行减法运算,也会允许对整数进行差异溢出。