如何在使用比较器时排除字符串

时间:2013-05-17 07:21:29

标签: java comparator

现在我使用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 个答案:

答案 0 :(得分: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());
     }
};

答案 1 :(得分: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?
    }
}

答案 2 :(得分: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());
    }


});

答案 3 :(得分: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;
    }
}