
스트림은 데이터가 흐르는 컨베이어벨트와 같습니다. 데이터(배열, 리스트 등)를 이 벨트 위에 올려놓으면, 여러 작업대(메서드)를 거치면서 데이터를 필터링하거나 가공하고, 마지막에 원하는 형태로 완성품(배열, 리스트, 특정 값 등)을 얻는 과정입니다.
단계별 코드와 자세한 설명
다양한 데이터 소스로부터 스트림을 만들 수 있습니다.
Arrays.stream(배열)list.stream()IntStream.rangeClosed(시작, 끝)// 예시
String[] names = {"IronMan", "Thor", "Hulk", "Captain"};
Stream<String> stream1 = Arrays.stream(names); // 배열에서 스트림 생성
List<String> nameList = List.of("IronMan", "Thor", "Hulk", "Captain");
Stream<String> stream2 = nameList.stream(); // 리스트에서 스트림 생성
IntStream stream3 = IntStream.rangeClosed(1, 10); // 1~10 숫자 스트림 생성
컨베이어 벨트가 돌아가는 동안 데이터를 원하는 형태로 가공하는 단계입니다. 여러 개의 중간 연산을 연결해서 사용할 수 있습니다. (메서드 체이닝)
filter(조건): 조건에 맞는 데이터만 남깁니다. (예: 짝수만 남기기)map(함수): 각 데이터를 원하는 형태로 변환합니다. (예: 모든 숫자를 제곱하기, 문자열을 대문자로 바꾸기)sorted(): 데이터를 정렬합니다.distinct(): 중복된 데이터를 제거합니다.// 예시: 1부터 10까지 숫자 중 짝수만 골라서, 그 숫자들을 제곱하기
IntStream.rangeClosed(1, 10) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
.filter(n -> n % 2 == 0) // [2, 4, 6, 8, 10]
.map(n -> n * n); // [4, 16, 36, 64, 100]
가공된 데이터를 모아 최종 결과물로 만드는 단계입니다. 최종 연산이 실행되어야 모든 중간 연산들이 실제로 동작합니다.
toArray(): 배열로 만듭니다.collect(Collectors.toList()): 리스트로 만듭니다.forEach(동작): 각 데이터에 대해 특정 동작을 수행합니다. (예: 출력)count(): 데이터의 개수를 셉니다.sum(): 모든 숫자를 더합니다.// 예시: 위에서 만든 스트림을 최종적으로 배열로 만들기
int[] resultArray = IntStream.rangeClosed(1, 10)
.filter(n -> n % 2 == 0)
.map(n -> n * n)
.toArray(); // 최종 연산!
// resultArray는 [4, 16, 36, 64, 100]이 됩니다.
for문과 if문을 여러 번 쓰는 것보다 훨씬 짧고 명확하게 코드를 작성할 수 있습니다.
잘 봤습니다! 처음 부분에 Steam으로 R이 빠진 오타가 2부분 있네요!