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")) ) )