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