나의보물들/Java
Java에서 Stream을 활용하여 정수 데이터를 처리할 때 왜 반환 타입이 다를까?
솔솔하네
2024. 7. 15. 23:22
S
ArrayList<String> data3 = new ArrayList<String>();
data3.add("1");
data3.add("2");
data3.add("3");
data3.add("4");
data3.add("5");
System.out.println(data3.stream().mapToInt(Integer::parseInt).max()); // OptionalInt[5]
System.out.println(data3.stream().mapToInt(Integer::parseInt).count()); // 5
System.out.println(data3.stream().mapToInt(Integer::parseInt).min().getAsInt()); // 1
위의 코드에서 3가지의 출력문이 있는데 data3에서 Stream을 활용하여 정수 데이터를 처리 하는 코드이다.
그런데 max(), count(), min() 세가지 전부 정수를 반환할 것 같았지만 max(), min()는 OptionalInt로 반환되고있다.
과연 왜 그런것일까??
- max() 메서드:
- datas3.stream().mapToInt(Integer::parseInt).max()
- 반환 형식: OptionalInt
- 이 메서드는 Stream에서 가장 큰 값을 OptionalInt로 감싼 후 반환한다. OptionalInt는 값이 있을 수도 있고 없을 수도 있는 값을 표현하는 클래스이다. 따라서 최댓값이 존재하지 않을 수 있으므로 이를 다루기 위해 OptionalInt를 사용한다.
- count() 메서드:
- datas3.stream().mapToInt(Integer::parseInt).count()
- 반환 형식: long
- Stream에 포함된 요소의 수를 반환한다. 반환 형식이 long인 이유는 Stream이 매우 큰 경우를 대비하여 int 범위를 초과할 수 있기 때문이다.
- Java의 Stream은 크기가 제한되지 않은 데이터 스트림을 표현할 수 있음 => int로 표현할 수 있는 범위를 초과 할 수 있음 => long은 매우 큰 수의 요소 수를 표현하는 데 충분
- min() 메서드:
- datas3.stream().mapToInt(Integer::parseInt).min().getAsInt()
- 반환 형식: int
- 이 메서드는 Stream에서 가장 작은 값을 반환한다. OptionalInt를 통해 값을 얻기 위해 getAsInt()를 사용하며, 이는 OptionalInt가 값을 포함할 때만 사용 가능하다. 이 경우, 최솟값이 반드시 존재해야 하므로 getAsInt()를 안전하게 사용할 수 있다고 한다.