728x90
Java 스트림 API: Arrays.stream과 mapToLong(Long::parseLong) 완벽 이해
Arrays.stream
과 mapToLong(Long::parseLong)
같은 함수는 자바 스트림(Stream) API를 사용하는 방식 중 하나입니다. 스트림은 데이터를 처리하는 연속된 함수 호출 체인을 의미하며, 함수형 프로그래밍(Functional Programming)의 개념을 기반으로 동작합니다.
아래에서 하나씩 자세히 설명해 볼게요.
1. Arrays.stream 이란?
- 배열을 스트림으로 변환하는 메서드입니다.
- 스트림은 데이터를 하나씩 처리하는 추상적인 개념으로, 데이터를 필터링, 변환, 수집 등의 작업을 할 때 사용됩니다.
사용법
Arrays.stream(배열)
예제
int[] arr = {1, 2, 3, 4, 5};
Arrays.stream(arr) // 배열 -> 스트림
.forEach(System.out::println); // 각 요소 출력
2. mapToLong이란?
- 스트림 내부의 데이터를 다른 타입으로 변환하는 작업을 수행합니다.
mapToLong
은 데이터를long
타입으로 변환할 때 사용합니다.
왜 사용하는가?
- 입력 데이터가 문자열(String)이라면, 이를 숫자(long)로 변환해야 계산 등에 활용할 수 있습니다.
- 스트림 연산 중 변환 작업은 map 계열 메서드로 처리합니다.
mapToLong 기본 구조
스트림.mapToLong(변환함수)
예제
String[] numbers = {"10", "20", "30"};
long[] longs = Arrays.stream(numbers) // 스트림 생성
.mapToLong(Long::parseLong) // String -> long 변환
.toArray(); // long[]으로 변환
여기서 Long::parseLong은?
- 메서드 참조(Method Reference): 기존 메서드를 간결하게 호출하는 문법.
- Long::parseLong은 Long 클래스의 parseLong 메서드를 참조합니다.
- 동작 방식: x -> Long.parseLong(x)와 동일.
3. 스트림 처리의 전체 과정
스트림을 사용하는 작업은 크게 세 단계로 나뉩니다.
- 생성: 데이터를 스트림으로 변환.
- 예: Arrays.stream(array)
- 중간 연산: 데이터를 변환하거나 필터링.
- 예: .mapToLong(Long::parseLong)
- 최종 연산: 데이터를 수집하거나 출력.
- 예: .toArray() (배열로 반환), .forEach() (출력)
728x90
전체 예제
입력값을 long[]로 변환하는 예제를 다시 작성합니다.
예제
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String input = "10 20 30 40 50"; // 공백으로 구분된 문자열
long[] numbers = Arrays.stream(input.split(" ")) // 공백으로 나눔 -> 스트림 생성
.mapToLong(Long::parseLong) // 각 문자열을 long으로 변환
.toArray(); // long[]로 변환
// 결과 출력
for (long num : numbers) {
System.out.println(num);
}
}
}
한 줄씩 이해
- input.split(" ")
- 문자열을 공백 기준으로 나눠 String[] 생성.
- Arrays.stream(...)
- 문자열 배열을 스트림으로 변환.
- .mapToLong(Long::parseLong)
- 각 문자열을 long 타입으로 변환.
- .toArray()
- 변환된 데이터를 long[]로 반환.
연습 포인트
- map과 mapToLong 차이점
- map: 데이터를 변환하지만 타입은 유지 (일반적으로 Stream 유지).
- mapToLong: 데이터를 long 타입으로 변환 (LongStream 반환).
- 메서드 참조 (Class::Method)
- 익숙해질 때까지 x -> Long.parseLong(x)로 연습해 보세요.
- 이후 Long::parseLong처럼 간결한 형태를 사용하면 됩니다.
Tip
초반엔 익숙하지 않을 수 있지만, 스트림 API를 활용하면 코드가 깔끔해지고 반복적인 작업이 줄어듭니다. 기본적인 예제부터 차근차근 따라 하다 보면 금방 익숙해질 거예요! 😊
728x90
'Java' 카테고리의 다른 글
Maven Pom.xml 구조에 관하여 (0) | 2025.04.29 |
---|---|
[Java] String으로 입력받은 숫자들 int 배열에 한번에 저장하기 (3) | 2024.12.02 |
[Java] Int와 Long 사용 구분하기 (2) | 2024.12.02 |
[Java] Scanner vs BufferedReader (0) | 2024.11.25 |
[Java] 표준입출력 System.in 클래스 (3) | 2024.11.12 |