첫째,이 :
final long sum = levels.stream()
.mapToLong(first -> getSomeValue(first) + first.getSecondLevels().stream().mapToLong(this::getSomeValue).sum())
.sum();
또는 일부 도우미 방법
박스형
Long
값을 사용하는 것은 의미가 없으며 박스형 값이 필요한 경우에도를 호출 할 필요가 없습니다,
long
프리미티브를 박스형
Long
개체로 변환 할 때 Java가 이미이 작업을 수행합니다. 피가수의 순서에 의존하지 않는
long
값을 추가 이후 추가
는, 어쨌든 마지막에 추가됩니다 조작을 통해 두 변수를 유지하는 이유가 없습니다 :
long result=0;
for(FirstLevel first: Levels) {
result += getSomeValue(first);
for(SecondLevel second: first.getSecondLevels()) {
result += getSomeValue(second);
}
}
return result;
참고 연산자 +=
은 여기서 result = result + …
과 동일하지만 대상 피연산자의 반복을 피합니다.
하면, Levels
배열 인 경우 또는,
return Levels.stream()
.flatMapToLong(first -> LongStream.concat(
LongStream.of(getSomeValue(first)),
first.getSecondLevels().stream().mapToLong(second -> getSomeValue(second))))
.sum();
을
return Levels.stream()
.mapToLong(first ->
getSomeValue(first) + first.getSecondLevels().stream()
.mapToLong(second -> getSomeValue(second)).sum())
.sum();
으로 트림 동작과 같은 물품 또는 수 모두 Levels
및 getSecondLevels
의 결과, 컬렉션 있다고 가정 Levels.stream()
을 Arrays.stream(Levels)
으로 대체해야하며 마찬가지로 getSecondLevels()
이 배열을 반환하면 first.getSecondLevels().stream()
을으로 대체해야합니다.
그래서 레벨은 루프를 통과하는 횟수를 추적하는 것일뿐입니다. –
그리고 x + = getSomeValue (x) // 같은 것을 시도해보십시오. 그러나 getSomeValue (첫 번째) 여야합니까? –