問題は、POJOオブジェクトの膨大なコレクションを並べ替えることです
class Entity{
String key1;
String key2;
String key3;
String key4;
}
その後、すべてのフィールドのアルファベット順に。つまり、最初にkey1でソートし、次にkey2などでソートします。そのキーはどれもnullになる可能性があります。問題はそれを行う最も簡単な方法です。
問題は、POJOオブジェクトの膨大なコレクションを並べ替えることです
class Entity{
String key1;
String key2;
String key3;
String key4;
}
その後、すべてのフィールドのアルファベット順に。つまり、最初にkey1でソートし、次にkey2などでソートします。そのキーはどれもnullになる可能性があります。問題はそれを行う最も簡単な方法です。
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に感謝します。