Home > Backend > Java > ☕️[Java] IntStream

☕️[Java] IntStream
Java Programming Language Backend

1️⃣ Java Docs - IntStream.

Interface IntStream

All SuperInterfaces : AutoCloseble, BaseStream<Integer, IntStream>


public interface IntStream extends BaseStream<Integer, IntStream>
  • 순차 및 병렬 집계 연산을 지원하는 기본 int 값 요소의 시퀀스입니다. 이것은 Stream의 int 기본형 특수화입니다.
    • IntStreamStream 의 한 형태로, int 값의 시퀀스를 처리하며 순차 및 병렬 연산을 지원한다는 의미입니다.
  • 다음 예제는 Stream과 IntStream을 사용하여 빨간색 위젯의 무게 합계를 계산하는 집계 연산을 보여줍니다.
int sum = widgets.stream()
                 .filter(w -> w.getColor() == RED)
                 .mapToInt(w -> w.getWeight())
                 .sum();
  • streams(스트림), stream operations(스트림 연산), stream pipelines(스트림 파이프라인), and parallelism(및 병렬 처리)에 대한 추가적인 명세는 Stream 클래스 문서와 java.util.stream 패키지 문서를 참조하십시오.

Since : 1.8

Nested Class Summary

Nested Classes

  • Modifier and Type: static interface
  • Interface: IntStream.Builder
  • Description: IntStream용 변경 가능한 빌더입니다.

2️⃣ IntStream.

IntStream 은 Java의 스트림 API(Stream API)의 일부로, 기본형 int 에 특화된 스트림을 나타냅니다.

IntStream 은 Java 8에서 도입된 스트림 API의 일부로, 컬렉션(리스트, 배열 등)과 같은 데이터 소스를 함수형 프로그래밍 스타일로 처리할 수 있게 해줍니다.

IntStreamStream<Integer> 와는 달리 오토박싱과 언박싱의 오버헤드가 없는 것이 특징입니다.

🙋‍♂️ IntStream의 주요 기능

1. 생성:

  • IntStream 을 생성하는 방법은 여러가지가 있습니다.
    • 예를 들어, 배열, 범위, 임의의 수 등을 사용하여 생성할 수 있습니다.

2. 연산:

  • 스트림 연산은 두 가지로 나뉩니다.
    • 중간 연산과 최종 연산.
      • 중간 연산은 또 다른 스트림을 반환하고, 지연(lazy) 평가됩니다.
      • 최종 연산은 스트림을 소비하여 결과를 반환합니다.

🙋‍♂️ IntStream 생성 방법.

1. of() 메서드:

  • 고정된 개수의 int 값을 스트림으로 생성합니다.
IntStream stream = IntStream.of(1, 2, 3, 4, 5);

2. range() 및 rangeClosed() 메서드:

  • 범위를 지정하여 스트림을 생성합니다. range 는 시작 값 포함, 끝 값 미포함, rangeClosed 는 시작 값과 끝 값을 모두 포함합니다.
IntStream stream = IntStream.range(0, 5); // 0, 1, 2, 3, 4, 5
IntStream closedStream = IntStream.rangeClosed(0, 5); // 0, 1, 2, 3, 4, 5

3. generate() 메서드:

  • 람다 표현식을 사용하여 무한 스트림을 생성합니다.
    • 🚨 주의: 무한 스트림은 반드시 제한을 걸아야 합니다.
IntStream stream = IntStream.generate(() -> 1).limit(5); // 1, 1, 1, 1, 1

4. iterate() 메서드:

  • 초기값과 반복 함수로 스트림을 생성합니다.
IntStream stream = IntStream.iterate(0, n -> n + 2).limit(5); // 0, 2, 4, 6, 8

5. builder() 메서드:

  • IntStream.Builder 를 사용하여 스트림을 생성합니다.
IntStream.Builder builder = IntStream.builder()l
builder.add(1).add(2).add(3).add(4).add(5);
IntStream stream = builder.builder();

6. 배열에서 생성:

  • 배열을 스트림으로 변환합니다.
int[] array = {1, 2, 3, 4, 5};
IntStream stream = Arrays.stream(array);

🙋‍♂️ IntStream의 주요 메서드.

1. 중간 연산:

  • map() : 각 요소에 함수 적용.
  • filter() : 조건에 맞는 요소만 통과
  • distinct() : 중복 요소 제거
  • sorted() : 정렬
  • limit() : 스트림 크기 제한
  • skip() : 처음 n개 요소 건너뛰기

2. 최종 연산:

  • forEach() : 각 요소에 대해 액션 수행
  • toArray() : 배열로 변환
  • reduce() : 모든 요소를 누적하여 하나의 값으로
  • collect() : 컬렉션으로 변환
  • sum() : 합계 연산
  • average() : 평균 계산
  • min(), max() : 최소, 최대값 찾기
  • count() : 요소 개수 반환

💻 예제 코드

예제 1: 0에서 5까지 거꾸로 출력.

import java.util.stream.IntStream;

public class Reverse {

	public static void main(String[] args) {
		IntStream.rangeClosed(0, 5)
		         .map(i -> 5 - i)
		         .forEach(System.out::println);
	}
}
/*
=== 출력 ===
5
4
3
2
1
0
*/

예제 2: 배열의 합계 계산

import java.util.stream.IntStream;

public class ArraySum {

	public static void main(String[] args) {
		int[] array = {1, 2, 3, 4, 5};
		int sum = IntStream.of(array).sum();
		System.out.println("sum = " + sum); // sum = 15
	}
}

예제 3: 짝수 필터링

import java.util.stream.IntStream;

public class FilterEvenNumber {

	public static void main(String[] args) {
		IntStream.rangeClosed(1, 10)
		         .filter(n -> n % 2 == 0)
		         .forEach(System.out::println);
	}
}
/*
=== 출력 ===
2
4
6
8
10
*/

📝 요약

IntStream 은 Java의 스트림 API의 일부분으로, 기본형 int에 특화된 스트림입니다.

이를 통해 컬렉션이나 배열을 함수형 프로그래밍 스타일로 처리할 수 있습니다.

IntStream 은 다양한 생성 방법과 중간 및 최종 연산을 제공하여 효율적이고 직관적인 데이터 처리를 가능하게 합니다.

📚 참고 문헌.