问题是对大量POJO对象进行排序
class Entity{
String key1;
String key2;
String key3;
String key4;
}
随后按所有字段的字母顺序排列。这意味着首先我们按key1排序,然后按key2等排序。任何一个键都可以为null。问题是最简单的方法。
答案 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的指点。