가 주어지면 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));
}
나는 더 간결한 버전을 원했고 아마도 스트림을 사용하거나 다르게 작성되었습니다. 당신의 제안은 무엇입니까?
다음은 스트림 버전입니다.
unicorns.stream()
.flatMap(unicorn -> unicorn.getRiders()
.stream()
.filter(rider -> rider.getType() == Rider.Type.EXPERIENCED)
.map(rider -> new AbstractMap.SimpleEntry<>(unicorn, rider)))
.max(Comparator.comparingLong(entry -> entry.getValue().getRideTime()))
.map(entry -> new ImmutablePair<>(entry.getKey(), entry.getValue()));
이 flatMap
부분은 모든 Riders를 AbstractMap.SimpleEntry
각각 a Rider
와 그 Unicorn
부분을 포함하는 s 로 평평하게 만듭니다. 그런 다음 우리는 두 비교하여 최대 항목 수 Rider
의를 rideTime
. 존재한다면 ImmutablePair 결과를 생성합니다.Optional.empty
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다