import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
class Ideone {
public static void main
(String[] args
) { final List
<BodyOfWater
> list
= new ArrayList
<>(List.
of( BodyOfWater.of(3.0),
BodyOfWater.of(1.0),
BodyOfWater.of(2.0),
BodyOfWater.of(null)));
list.add(null);
list.
sort(Comparator.
<BodyOfWater
>nullsFirst
(null).
thenComparing( BodyOfWater::getDepth,
Comparator.
<Double
>nullsLast
(null).
thenComparing(d
-> d
))); }
}
class BodyOfWater {
private BodyOfWater
(Double depth
) { this.depth = depth;
}
public static BodyOfWater of
(Double depth
) { return new BodyOfWater(depth);
}
return depth;
}
@Override
return "BodyOfWater{" +
"depth=" + depth +
'}';
}
}
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKaW1wb3J0IGphdmEudXRpbC5MaXN0OwoKY2xhc3MgSWRlb25lIHsKCiAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICBmaW5hbCBMaXN0PEJvZHlPZldhdGVyPiBsaXN0ID0gbmV3IEFycmF5TGlzdDw+KExpc3Qub2YoCiAgICAgICAgICBCb2R5T2ZXYXRlci5vZigzLjApLAogICAgICAgICAgQm9keU9mV2F0ZXIub2YoMS4wKSwKICAgICAgICAgIEJvZHlPZldhdGVyLm9mKDIuMCksCiAgICAgICAgICBCb2R5T2ZXYXRlci5vZihudWxsKSkpOwogICAgICBsaXN0LmFkZChudWxsKTsKICAgICAgbGlzdC5zb3J0KENvbXBhcmF0b3IuPEJvZHlPZldhdGVyPm51bGxzRmlyc3QobnVsbCkudGhlbkNvbXBhcmluZygKICAgICAgICAgIEJvZHlPZldhdGVyOjpnZXREZXB0aCwKICAgICAgICAgIENvbXBhcmF0b3IuPERvdWJsZT5udWxsc0xhc3QobnVsbCkudGhlbkNvbXBhcmluZyhkIC0+IGQpKSk7CiAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaXN0KTsKICB9Cn0KCmNsYXNzIEJvZHlPZldhdGVyIHsKICAgIHByaXZhdGUgZmluYWwgRG91YmxlIGRlcHRoOwoKICAgIHByaXZhdGUgQm9keU9mV2F0ZXIoRG91YmxlIGRlcHRoKSB7CiAgICAgICAgdGhpcy5kZXB0aCA9IGRlcHRoOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgQm9keU9mV2F0ZXIgb2YoRG91YmxlIGRlcHRoKSB7CiAgICAgICAgcmV0dXJuIG5ldyBCb2R5T2ZXYXRlcihkZXB0aCk7CiAgICB9CgogICAgcHVibGljIERvdWJsZSBnZXREZXB0aCgpIHsKICAgICAgICByZXR1cm4gZGVwdGg7CiAgICB9CgogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgIHJldHVybiAiQm9keU9mV2F0ZXJ7IiArCiAgICAgICAgICAgICJkZXB0aD0iICsgZGVwdGggKwogICAgICAgICAgICAnfSc7CiAgICB9Cn0=