随后按字段对对象排序

时间:2012-07-05 08:57:06

标签: java sorting comparator

问题是对大量POJO对象进行排序

class Entity{
    String key1;
    String key2;
    String key3;
    String key4;
}

随后按所有字段的字母顺序排列。这意味着首先我们按key1排序,然后按key2等排序。任何一个键都可以为null。问题是最简单的方法。

2 个答案:

答案 0 :(得分:2)

private static int nullSafeCompare(String a, String b){
    if (a==b) return 0;
    if (a == null) return -1;
    if (b == null) return 1;
    return a.compareTo(b);
}


int compare(Entity a, Entity b){
   // if a and b can also be null:
   if (a==b) return 0;
   if (a==null) return -1;
   if (b==null) return 1;

   int c = nullSafeCompare(a.key1, b.key1);
   if (c != 0) return c;

   c = nullSafeCompare(a.key2, b.key2);
   if (c != 0) return c;

   c = nullSafeCompare(a.key3, b.key3);
   if (c != 0) return c;

   return nullSafeCompare(a.key4, b.key4);
}

答案 1 :(得分:1)

执行append all keys together然后使用Comparator<Entity> -

的好方法
// all the keys of an entity are appended and than compared with other entity
int compare(Entity e1, Entity e2){
  return appendAndHandleNull(e1.key1, e1.key2, e1.key3).compareTo(appendAndHandleNull(e2.key1, e2.key2, e2.key3));
}



/** 
 * method to get all keys of an entity in appended form
 */
private static final String appendAndHandleNull(String list...){
   StringBuilder result = new StringBuilder ();
   for(String s : list){
      result.append(s!=null?s:"").append(" ");//note: a space is appended after each key
   }
   return result.toString();
}

我在这里做的是......实体的所有密钥都按照需要进行比较的顺序附加在一起,然后与另一个实体进行比较。

你可能还需要在追加之前修剪每个值。

<强>编辑: 还需要按space分隔每个密钥才能使代码正常工作。

上面修复的代码。谢谢@Thilo的指点。