1

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

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

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

4

2 回答 2

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);
}
于 2012-07-05T09:00:38.947 回答
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 指出。

于 2012-07-05T09:12:03.807 回答