オブジェクトのリストがあります。それらのオブジェクトには、(他のものとともに)プライベートint配列があります(それが役立つ場合は、リストに転送できます)。この配列のパブリックゲッターがあります。すべての配列は同じサイズです。
このように配列に基づいてオブジェクトを並べ替えたい:
Unsorted:
{[0, 1, 4, 5],
[0, 0, 2, 3],
[0, 1, 1, 2]}
Sorted:
{[0, 0, 2, 3],
[0, 1, 1, 2],
[0, 1, 4, 5]}
言葉では(それは辞書式と呼ばれます):
たとえば、通常のコンパレータを使用して配列の最初の要素のみを検索できますが、すべてを検索する方法がわかりません。
素晴らしいJava 8ソリューションは
static final Comparator<CustomObject> COMPARATOR = (o1, o2) -> {
int[] arr1 = o1.getArray();
int[] arr2 = o2.getArray();
return IntStream.range(0, arr1.length)
.map(i -> Integer.compare(arr1[i], arr2[i]))
.filter(i -> i != 0)
.findFirst()
.orElse(0);
};
次に、を指定するとList<CustomObject>
、次のことができます
list.sort(COMPARATOR);
(Comparator
同じ長さの配列でのみ機能します。変更することもできます)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加