Java 複数要素ソートのおさらい

1つの要素ソートであれば、単純な例

public class Foo{
    public Integer width;
    public Integer height;
    public Integer depth;
}
List<Foo> list;
// list 生成後、、
list.stream().sorted((a, b)->a.width.compareTo(b.width))

width -> height -> depth の順にソート
yipuran-core/Fieldgetter.java at master · yipuran/yipuran-core · GitHub
を使って、

list.stream().sorted(
   Comparator.comparing(Fieldgetter.of(t->"width"))
   .thenComparing( Comparator.comparing(Fieldgetter.of(t->"height")) )
   .thenComparing( Comparator.comparing(Fieldgetter.of(t->"depth")) )
)

Comparator.comparing の引数は、Function だけど、Foo::getXxxx のメタ参照記述で getter を書くか、
上のようにするしかない。

height だけを降順にするなら、

list.stream().sorted(
   Comparator.comparing(Fieldgetter.of(t->"width"))
   .thenComparing( Comparator.comparing(Fieldgetter.of(t->"height")).reversed() )
   .thenComparing( Comparator.comparing(Fieldgetter.of(t->"depth")) )
)