728x90
반응형

Stream에서 index 사용하기

Stream은 index를 알 수 없지만 AtomicInteger를 사용하여 index 생성하여 사용 가능함

 


AtomicInteger는 원자적인 연산을 제공하는 클래스임

여러 스레드에서 동시에 접근하는 경우 데이터의 일관성이 보장됨

연산을 통해 증가, 감소, 비교 및 교환 연산 가능

 

주요 메서드

get() 객체의 현재 값을 반환
set(int newValue) 객체의 값을 주어진 newValue 설정
getAndSet(int newValue) 객체의 현재 값을 반환하고, 동시에 값을 주어진 newValue 설정
incrementAndGet() 객체의 값을 1 증가시킨 , 증가된 값을 반환
decrementAndGet() 객체의 값을 1 감소시킨 , 감소된 값을 반환
getAndIncrement() 객체의 값을 반환한 , 값을 1 증가
getAndDecrement() 객체의 값을 반환한 , 값을 1 감소
compareAndSet(int expect, int update) 객체의 값을 expect 비교하여 같으면 update 설정
연산은 원자적으로 수행되며, 값이 성공적으로 변경되었는지 여부를 boolean으로 반환

 

Stream 적용 예시

import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {
    public static void main(String[] args) {
        String[] names = {"권정렬", "수지", "차은우", "송혜교"};

        AtomicInteger index = new AtomicInteger(1); // 시작 인덱스

        Arrays.stream(names)
                .forEach(name -> {
                    int currentIndex = index.getAndIncrement();
                    System.out.println("인덱스: " + currentIndex + ", 이름: " + name);
                });
    }
}


// 인덱스: 1, 이름: 권정렬
// 인덱스: 2, 이름: 수지
// 인덱스: 3, 이름: 차은우
// 인덱스: 4, 이름: 송혜교
반응형
복사했습니다!