IntStream

최수정·2022년 12월 7일
0

이것이 JAVA다

목록 보기
8/10

https://school.programmers.co.kr/learn/courses/30/lessons/120833
위의 프로그래머스 문제를 풀다가, 배열을 자르는 방법에 대해 좋은 방법으로 IntStream이 있었다다.

이 IntStream을 알아보기 전에 Stream이 무엇인지 알아보자.


📕 스트림

스트림은 요소들이 하나씩 흘러가면서 처리된다는 의미를 가지고 있으며, list/set 과 같은 컬렉션에서 요소를 반복 처리하기 위해 사용한다.

Stream<String> stream = list.stream();
stream.forEach(item -> //item 처리 );

➡️ List 컬렉션의 stream() 메소드로 Stream 객체를 얻고, forEach() 메소드로 요소를 어떻게 처리 할지를 람다식으로 제공한다.

stream의 특징으로는
1. 내부 반복자이므로 처리 속도가 빠르고

2. 병렬 처리에 효율적이다. - 내부 반복자는 멀티 코어 CPU를 최대한 활용하기 때문에

2. 람다식으로 다양한 요소 처리를 정의할 수 있다.
3. 중간 처리와 최종 처리를 수행하도록 파이프 라인을 형성할 수 있다.

java.util.stream 패키지에는 스트림 인터페이스들이 있다.


스트림에 대해 간략하게 알아보았으니 이제 IntStream에 대해서 알아보자.

📕 IntStream

  • stream 기능을 통해 범위 지정, 중복 값 제거, 요소 변환, 요소 정렬 등을 쉽게 할 수 있다.

문제에서 활용할 메소드는,
IntStream의 정적메소드인 range() 와 rangeClosed() 메소드를 이용하면 특정 범위의 정수 스트림을 얻을 수 있다.

public class CutArray {
    public static int sum;
    public static void main(String[] args) {
        IntStream stream = IntStream.range(1,101); // idx 1 ~ 100까지
        stream.forEach(a -> sum += a);
    }
 }
  • range() : 끝 수를 포함하지 않는다
  • rangeClosed() : 끝 수를 포함한다.
public int[] solution(int[] numbers, int num1, int num2) {
        int[] answer = IntStream.range(num1, num2 + 1)
                .map(i -> numbers[i])
                .toArray();
        return answer;
    }

--

🥺 문제에서 case 마다 속도가 달랐던 이유에 대해 알아보자.

0개의 댓글