入れ子リスト、List<List<T>> をソートする

入れ子リストをソートしなければいけない要件は少ないとは思います。

任意クラスが、Comparable を実装しているなら簡単ですがそうでなく、中の属性値でソートしなければならない時は
面倒です。

例)Item は,属性 Integer price を Not NULL で持っており、この同じ数の List 同志をソートします。

public Comparator<List<Item>> build(String name){
   AtomicReference<Comparator<List<Item>>> cp = new AtomicReference<>(Comparator.comparing(u->u.get(0).getPrice()));
   IntStream.range(1, size).boxed().forEach(i->{
       cp.set(cp.get().thenComparing(Comparator.comparing(u->u.get(i).getPrice())));
   });
   return cp.get();
}

こんなComparatorを生成しなければなりません。
なんとか汎用的にならないかと考えたのが、、
以下 Fieldgetter を使って、、
yipuran-core/Fieldgetter.java at master · yipuran/yipuran-core · GitHub

@SuppressWarnings({ "unchecked", "rawtypes" })
public <T> Comparator<List<T>> build(String name){
   AtomicReference<Comparator<List<T>>> cp = new AtomicReference<>(Comparator.comparing(u->(Comparable)Fieldgetter.of(t->name).apply(u.get(0))));
   IntStream.range(1, size).boxed().forEach(i->{
      cp.set(cp.get().thenComparing( Comparator.comparing(t->(Comparable) Fieldgetter.of(e->name).apply(t.get(i)))));
   });
   return cp.get();
}

と、属性名を指定する形で、 IntStream.range(1, size). の size は、比較する List の List のサイズです。
そこで、まとめたのが、、
yipuran-core/NestedListComparator.java at master · yipuran/yipuran-core · GitHub
ですが、
リスト同志をソートすることなんて、やはり良い設計には思えない。。。