package chapter16;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/*
스트림 API
: 컬렉션 데이터를 효율적으로 처리할 수 있는 기능을 제공
>> 람다 표현식과 결합하여 직관적이며 간결한 코드 작성
cf) Arrays.asList();
: 일반 배열을 ArrayList로 반환
>> 원소를 추가하는 메소드를 가지고 있지 X, 사이즈를 바꿀 수 없다
>> java.util.ArrayList와 다른 클래스
*/
/*
특징
- 컬렉션 데이터를 간결하고 효율적으로 처리
- 데이터를 필터링, 맵핑, 축소 등의 작업을 용이하게 수행
- 함수형 프로그래밍 기법과 함께 사용
1. 데이터 파이프 라인
: 스트림은 데이터를 소스로 부터 연속적으로 처리하는 파이프라인을 구축
2. 데이터 변경 X
: 스트림은 원본 데이터 변경X, 새로운 값 반환
3. 지연 처리
: 중간 처리가 지연되어 최종 처리가 호출될 때 한 번에 처리
=== 스트림 API의 기본 구성 요소 ===
1. 소스(Source)
: 스트림을 생성하는 단계
> 컬렉션, 배열 또는 파일을 소스로 사용
2. 중간 연산
: 데이터를 필터링, 매핑하는 과정
> 연산을 연속적으로 사용 가능
> 스트림은 새로운 스트림을 반환
3. 최종 연산
: 모든 데이터를 처리한 후 결과를 반환하거나 출력하는 연산
3. 최종 연산
*/
public class D_Stream01 {
public static void main(String[] args) {
/*
기본적인 스트립 처리 예시
1. 리스트에서 짝수만 필터링하고 정렬한 후 출력
*/
List<Integer> numbers= Arrays.asList(1,2,3,4,5,6);
// 기존 방식
for(Integer i:numbers) {
if(i%2==0) {
System.out.print(i);
}
}
System.out.println();
// 람다 표현식
numbers.stream().filter(n-> n%2==0).forEach(System.out::print);
// == Stream API 기본 사용법==
// 1. 스트림 생성
List<String> names= Arrays.asList("Lee", "Kang", "Hyo");
// .stream으로 생성된 스트림은 일회성 사용만 가능
// >> 한 번 사용한 스트림은 재사용 할 수 없다.
Stream<String> stream= names.stream();
// 2. 중간 연산
// : 여러 개를 체인처럼 연결하여 사용 가능
Stream<String> filteredStream= stream.filter(name-> name.startsWith("Le"));
//Stream<Integer> lengthStream= stream.map(String::length);
// 3. 최종 연산
// : 처리를 완료하고 결과를 반환하거나 특정 작업을 수행
filteredStream.forEach(System.out::print);
Stream<Integer> lengthStream= names.stream().map(String::length);
System.out.println();
lengthStream.forEach(System.out::print);
List<String> filteredNames= names.stream().filter(name-> name.startsWith("Ka")).collect(Collectors.toList());
System.out.println();
System.out.println(filteredNames);
}
}
'java' 카테고리의 다른 글
| java활용 예시(Lambda 활용 함수) (0) | 2024.09.19 |
|---|---|
| java 활용 예시 (Builder) (0) | 2024.09.19 |
| java활용 예시(lambda expression) (0) | 2024.09.13 |
| java 활용 예시(내부 클래스) (0) | 2024.09.13 |
| java활용 예시(MVC 패턴) (2) | 2024.09.10 |