List<Integer> 로부터 최댓값의 인덱스를 탐색
int maxValueIndex = 0;
int maxValue = arr.get(0);
int arrLength = arr.size();
for (int i=1; i<arrLength; i++) {
int currentValue = arr.get(i);
if (currentValue > maxValue) {
maxValue = currentValue;
maxValueIndex = i;
}
}
AtomicInteger index = new AtomicInteger();
int maxValueIndex = arr.stream()
.reduce(0, (maxValueIndex, currentValue) -> {
int currentIndex = index.getAndIncrement();
int maxValue = arr.get(maxValueIndex);
if (currentValue > maxValue) {
return currentIndex;
}
else {
return maxValueIndex;
}
});
전체를 합하거나 곱한 값을 찾아내는데 용이
객체의 각 요소들에 대해 람다 함수를 수행
람다식에서 return한 값이 다음 회차의 identity가 됨
스트림은 내부에서 동적 변수를 사용할 수 없기에 AtomicInteger를 사용
원자적인 연산을 지원하는 정수형 변수 스레드 안전
.reduce의 람다식 내부에서도 사용할 수 있음
getAndIncrement() : i++
getAndDecrement() : i--
incrementAndGet() : ++i
decrementAndGet() : --i
get() : getter
set(int newValue): 값을 변경
compareAndSet(int expectValue, int newValue): 기대하는 값과 값이 다르다면 변경