開始ー終了、あるいは、from-to などのリストの連続性を確認する

任意のfrom-toを表現するオブジェクトとして、

import lombok.Data;

@Data
public class Route{
    private Integer from;
    private Integer to;
}

こんなクラスがあったとする。これのリストのパターンとして、
想定している Route のリスト、連続性が成立している

From To
0 9
10 19
20 29
30 null

重なりがある(=20)

From To
0 9
10 20
20 29
30 null

抜けがある(=19)

From To
0 9
10 18
20 29
30 null

これら Route のリストの連続性、重なりの存在、抜けの存在をチェックする方法で
考えた方法が、Stream の reduce を使う方法、AtomicBoolean を使わなければスッキリするのだが。
もっと綺麗な方法が思いつかない。

List<Route> list; // ←ここに何かの処理で格納される。ソートされている前提で、
AtomicBoolean result = new AtomicBoolean(true);
list.stream().reduce(new Route(), (a, b)->{
    result.set(Boolean.logicalAnd(res.get(), a.getTo()==null
            ? true
            : (b.getFrom()-a.getTo())==1));
    return b;
});

// result.get()==true なら、連結に重なりも抜けはない。連続性が想定どおり
// result.get()==false なら、連結に重なりか抜けがある。

最後の Route の to が null であるかをチェックしたければ、

AtomicBoolean result = new AtomicBoolean(true);
Route lastroute = list.stream().reduce(new Route(), (a, b)->{
    result.set(Boolean.logicalAnd(res.get(), a.getTo()==null
            ? true
            : (b.getFrom()-a.getTo())==1));
    return b;
});
// lastroute.getTo() が null かどうかをチェックする