Javaで拗らせた感じのスターリンソートを書いた


Javaで拗らせた感じのスターリンソートを書いた

最近流行りのスターリンソートですが、
公開されているjavaの実装が、拡張ですらないforループを使っていたり、
Comparatorを渡せなかったりしてなんか前時代的だなぁと思ったので自分でも書き始めてみたんですが、
途中で悪乗りしてどうせならforだけじゃなくifも使わない縛りにしようとか考えだしたら変なコードになってしまいました。

とりあえず供養も兼ねて

できたもの

    public static <T extends Comparable<? super T>> List<T> stalinSort(List<T> origin) {
        return stalinSort(origin, Comparator.naturalOrder());
    }

    public static <T> List<T> stalinSort(List<T> origin, Comparator<? super T> comparator) {
        return origin.stream().reduce(new LinkedList<T>(),
                (prev, current) -> Comparator.nullsFirst(comparator).compare(prev.peekLast(), current) <= 0
                        && prev.add(current) ? prev : prev,
                (a, b) -> {
                    throw new UnsupportedOperationException();
                });
    }


多分動くはず。