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, 이름: 송혜교
반응형
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java Error] class java.lang.Integer cannot be cast to class java.lang.Long 해결 방법 (0) | 2023.05.23 |
---|---|
[Java] 개선된 Switch문 (Switch Expression) (0) | 2023.05.22 |
[Java] LocalDate 해당 월의 마지막 날짜 구하기 (0) | 2023.05.18 |
[Java] Stream sorted 여러개 정렬하기 (0) | 2023.05.10 |
[Java] date 하루 전 날짜 표시되는 경우 (0) | 2023.05.03 |