0

目前我正在使用 Comparator 对我的对象进行排序。我在列表中的项目如下

   FIRST ITEM
   SECOND ITEM
   THIRD ITEM
   LAST ITEM
   FORTH ITEM

比较器代码是:

public static Comparator<PartyResultVO> sortData = new Comparator<PartyResultVO>()
{

     public int compare(VO vo1, VO vo2)
     return (vo1.getName()).compareTo(vo2.getName());
};

它可以完美地排序。但我想要的是我需要最后放置带有名称的项目LAST ITEM。我如何只排除那个对象并放在最后。有什么办法可以做到这一点。

请帮助我。在此先感谢...

4

4 回答 4

5

您可以为这种情况添加特殊逻辑:

public static Comparator<VO> sortData = new Comparator<VO>()
{
     public int compare(VO vo1, VO vo2) {
         if (vo1.getName().equals("LAST ITEM")) {
              if (vo2.getName().equals("LAST ITEM")) {
                  return 0;
              } else {
                  return 1;
              }
         else if (vo2.getName().equals("LAST ITEM")) {
              return -1;
         }
         return (vo1.getName()).compareTo(vo2.getName());
     }
};
于 2013-05-17T07:24:31.110 回答
2

您可以将状态引入比较器并使其在某些值下异常工作,返回一个整数以保证它将是最后一个。Keppil 比较器的扩展示例:

class PartyResultComparator implements Comparator<PartuResultVO> {
    String exceptionalValue;

    public PartyResultComparator(String exceptionalValue) {
        this.exceptionalValue = exceptionalValue;
    }

    public int compare(VO vo1, VO vo2) {
         if (isExceptional(vo1.getName())) {
              return 1;
         else if (isExceptional(vo2.getName())) {
              return -1;
         }

         return (vo1.getName()).compareTo(vo2.getName());
    }

    private boolean isExceptional(String value) {
        // is this value exceptional?
    }
}
于 2013-05-17T07:24:42.203 回答
2

你能试试这个吗?

Collections.sort(list, new Comparator<PartyResultVO>() {

@Override
public int compare(VO vo1, VO vo2) {
    if (vo1.getName().equals("LAST ITEM")) {
          if (vo2.getName().equals("LAST ITEM")) {
              return 0;
          } else {
              return 1;
          }
     else if (vo2.getName().equals("LAST ITEM")) {
          return -1;
     }
        return  vo1.getName().compareTo(vo2.getName());
    }


});
于 2013-05-17T07:28:17.997 回答
0

更短的实现

public static Comparator<PartyResultVO> sortData = new Comparator<PartyResultVO>() {
     public int compare(VO vo1, VO vo2) {
         return mapToLast(vol.getName()).compareTo(mapToLast(vo2.getName()));
     }
    String mapToLast(String s) {
        return s.contains("LAST") ? "\uFFFF" : s;
    }
}
于 2013-05-17T07:32:44.257 回答