for(String st : Str){ System.out.print(index++); }
위 처럼 반복문이 돌 때마다 인덱스를 증가or감소 하여 처리하는 로직을 함수형 프로그래밍에서 사용하고 싶을 때가 있다.
하지만, 람다 표현식 내부에서는 final이나 final처럼 동작하는 (immutable) 숫자가 들어가지 않으면 아래와 같은 에러를 뱉는다.
sample.stream().forEach(x -> x.getSeq + i++); // Error
Variable used in lambda expression should be final or effectively final
이럴 때 사용하는 게 AtomicInteger, AtomicLong 이다.
AtomicInteger counter = new AtomicInteger(0); sample .stream() .forEach(x -> x.getSeq + counter.getAndIncrement()); 현재 값을 가져온 뒤 1 증가