-
[Java] IntStream 메소드 사용해보기스터디 노트 2023. 10. 16. 11:30
알고리즘 문제를 풀던 중 IntStream에 대해 활용하게된 내용이 있어서 공유를 합니다.
우선 IntStream.concat() 메소드는 2개의 IntStream을 합쳐주는 역할을 합니다.
"요소가 첫 번째 스트림의 모든 요소 다음에 두 번째 스트림의 모든 요소인 게으르게 연결된 스트림을 만듭니다. 입력 스트림이 모두 정렬되면 결과 스트림이 정렬되고 입력 스트림 중 하나가 병렬인 경우 병렬로 정렬됩니다. 결과 스트림이 닫히면 두 입력 스트림에 대한 닫기 핸들러가 호출됩니다."
두 스트림을 병합한 후 하나의 스트림으로 반환해주는 역할을 하는 메소드로 이런 식으로 사용할 수 있습니다.
하나의 기본 스트림을 두고 하나의 변형 스트림을 구성해야 한다면 다음과 같이 구성할 수 있겠죠.
// n이 10일 때 n이 1이 될 때까지 특정한 비즈니스를 수행해야 할 경우 // 1. IntStream.concat() 메소드 사용 List<Integer> concatList = IntStream.concat( // 2. iterate 메소드 사용 IntStream.iterate(n, i -> i > 1, i -> i % 2 == 0 ? i / 2 : i * 3 + 1), // 3. of 메소드 사용 IntStream.of(1)).boxed().collect(Collectors.toList());
순차적으로 정리를 해보겠습니다.
1. IntStream의 concat() 메소드를 사용했습니다. 이를 통해 아래의 두 스트림을 하나로 합치고 추가적인 작업을 진행할 수 있게 됩니다.
2. IntStream의 iterate() 메소드를 사용했습니다. 이를 통해 초기값 n(seed), 그리고 조건식(i -> i > 1)에 해하면 다음 연산을 진행합니다.
i -> i % 2 == 0 ? i / 2 : i * 3 + 1
연산 이후 다시 i로 조건식을 비교하고 처리합니다.
3. 조건식을 벗어나는 값이 들어오면(1), IntStream의 of() 메소드를 통해 두번째 IntStream을 생성하고 합칩니다.
여기서 주의해서 사용해야 할 점은 seed가 기본적으로 맨 첫번째 요소로 들어간다는 점입니다.
추후 seed 숫자를 통하여 무언가 연산을 해나가야 하는 로직에 반영하여 사용할 수 있을 것 같습니다 :D
'스터디 노트' 카테고리의 다른 글
[Java] 불변 단 건 리스트는 Collections.singletonList() 를 활용해보세요. (0) 2023.10.17 Java Optional의 메소드 사용 설명서(Optional 잘 활용하기) (1) 2023.10.16 자바 JDK 9 부터 JDK17까지의 주요 코딩 특징 (0) 2023.10.12 [Java] 객체 필드 Validation 손쉽게 구현하기 (feat. Bean Validation & @NotNull) (0) 2023.10.12 자바 21 특징 - SequencedCollection (2) 2023.10.10