728x90
자바의 정석 챕터 14를 읽고 정리
2.2 스트림 만들기
- 스트림의 소스가 될 수 있는 대상은 배열, 컬렉션, 임의의 수 등 다양함
컬렉션
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
//list를 소스로 하는 컬렉션 생성
Stream<Integer> intStream = list.stream();
- forEach()로 지정된 작업을 스트림의 모든 요소에 대해 수행 가능하다.
intStream.forEach(System.out::println);
intStream.forEach(System.out::println); // 에러. 스트림이 닫힘
배열
Stream<T> Stream.of(T... values); // 가변 인자
Stream<T> Stream.of(T[]);
Stream<T> Arrays.stream(T[]);
// int, long, double 경우
IntStream Arrays.stream(int[]);
// 문자열 경우
Stream<String> Arrays.stream(new String[] {"a","b","c"});
- long: LongStream
- double: DoubleStream
특정 범위의 정수
- IntStream, LongStream은 지정된 범위의 연속된 정수를 스트림으로 생성하는 메소드가 있음.
- range는 마지막 수를 포함하지 않고, rangeClosed는 마지막 수를 포함한다.
IntStream is = IntStream.range(int start, int end);
IntStream is2 = IntStream.rangeClosed(int start, int end);
임의의 수
- 난수 생성 시 Random클래스에 있는 ints(), longs(), doubles()를 사용한다.
IntStream intStream = new Random().ints(); // 무한 스트림
intStream.limit95).forEach(System.out::println); // 5개의 요소만 출력
ints(long size); // size만큼 스트림 생성
ints(int start, int end); // 지정된 범위 안에서 스트림 생성. end는 포함되지 않음
람다식 - Iterator(), generate()
- Iterator(), generate()는 람다식을 매개변수로 받아서, 람다식에 의해 계산되는 값들을 요소로 하는 무한 스트림을 생성한다.
빈 스트림
- null 대신 빈 스트림을 반환하는 것이 좋다.
Stream emptyStream = Stream.empty(); // empty()는 빈 스트림을 생성해서 반환한다.
long count = emptyStream.count(); // count는 0
두 스트림의 연결
- concat()을 이용하여 두 스트림을 하나로 연결할 수 있다.(타입이 같은 경우)
String[] str1 = {"a", "B", "C"};
String[] str2 = {"d", "e", "f"};
Stream<String> strs1 = Stream.of(str1);
Stream<String> strs2 = Stream.of(str2);
Stream<String> strs3 = Stream.concat(strs1, strs2); // 두 스트림을 하나로 연결
728x90
'개발 > Java & Kotlin' 카테고리의 다른 글
[Spring] 스프링 AOP (1) (0) | 2022.07.01 |
---|---|
[Java] 람다와 스트림(4) (0) | 2022.07.01 |
[Spring] 스프링 DI (2) (0) | 2022.06.29 |
[Spring] 스프링 DI (1) (0) | 2022.06.29 |
[Java] 람다와 스트림(2) (0) | 2022.06.29 |