Учитывая List<Unicorn>
, с каждым единорогом, содержащим List<Rider>
, вернуть единорога и последнюю информацию о всаднике для подгруппы всадников.
Я написал это так:
static Optional<ImmutablePair<Unicorn, Rider>> findLatestExperiencedRiderInfo(
final List<Unicorn> unicorns) {
Rider latestExperiencedRider = null;
Unicorn unicornOfLatestExperiencedRider = null;
long latestRideTime = 0L;
for (final Unicorn unicorn : unicorns) {
for (final Rider rider : unicorn.getRiders()) {
if (rider.getType() == Rider.Type.EXPERIENCED) {
final long time = rider.getRideTime();
if (time > latestRideTime) {
latestRideTime = time;
latestExperiencedRider = rider;
unicornOfLatestExperiencedRider = unicorn;
}
}
}
}
return latestExperiencedRider == null
? Optional.empty()
: Optional.of(new ImmutablePair<>(
unicornOfLatestExperiencedRider,
latestExperiencedRider));
}
Я надеялся на более лаконичную версию, возможно, с использованием потоков (или просто написанных по-другому).Каковы будут ваши предложения?