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();
});
}
多分動くはず。
Author And Source
この問題について(Javaで拗らせた感じのスターリンソートを書いた), 我々は、より多くの情報をここで見つけました https://qiita.com/xx2xyyy/items/81b244a0f9526da5da63著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .