티스토리 뷰
반응형
[자바의 정석 - 기초편] ch 14~17~22 스트림 만들기
1. 컬렉션을 스트림으로 변환하기
Collection인터페이스의 stream()을 통하여 변환한다. 아래와 같이 Collection.java 안에는 stream메서드가 존재한다.
- Stream<E> stream() // Collection인터페이스의 메서드
예제 Collection인 인터페이스의 stream을 사용하여 stream변환
List<Integer> list = Arrays.asList(1,2,3,4,5);
// list를 데이터소스로 하는 새로운 스트림을 생성한다.
Stream<Integer> intStream = list.stream();
intStream.forEach(System.out::print);
//stream has already been operated upon or closed
// stream은 일회성이기때문에 다시 생성하여 사용한다.
intStream = list.stream();
intStream.forEach(System.out::print);
2. 배열을 스트림으로 만들기
객체 배열로부터 스트림을 생성해보자
Stream<T> Stream.of(T... values); //가변인자
Stream<T> Stream.of(T[]);
Stream<T> Arrays.Stream(T[]);
// 시작인덱스, 갯수(마지막 count는 제외)
Stream<T> Arrays.Stream(T[] array, int startIndex, int endExclusive);
직접 사용해본다면 아래와 같다.
Stream<String> strStream = Stream.of("a", "b", "c");
Stream<String> strStream = Stream.of(new String[]{"a", "b", "c"});
Stream<String> strStream = Arrays.stream(new String[]{"a", "b", "C"});
// a, b만 출력
Stream<String> strStream = Arrays.stream(new String[]{"a", "b", "c"}, 0, 2);
객체배열보다는 박싱, 언박싱을 안해도되는, 효율이 높은 기본형Stream인 IntStream을 사용해보자
IntStream IntStream.of(int... values);
IntStream IntStream.of(int[]);
IntStream Arrays.stream(int[]);
IntStream Arrays.stream(int[], int startIndex, int endExclusive);
IntStream intStream = IntStream.of(1,2,3,4,5);
IntStream intStream2 = IntStream.of(new int[]{1,2,3,4,5});
IntStream intStream3 = Arrays.stream(new int[]{1,2,3,4,5});
IntStream intStream4 = Arrays.stream(new int[]{1,2,3,4,5}, 0, 3);
Stream<T>같은 경우는 T가 어떤타입이 올 지 모르니, Integer일 경우 count 함수만 제공을 하지만, IntStream안에는 다양한 메서드들이 존재한다. 그렇기에 숫자를 Stream 으로 사용할 경우 IntStream을 사용하여 속도향상과 다양한 메서드를 이용해보자
System.out.println(intStream.sum());
System.out.println(intStream2.average());
System.out.println(intStream3.max());
3. 스트림의로 만들기 - 임의의 수
가. 난수를 요소로 갖는 스트림 생성하기
// 크기가 5인 난수 스트림
IntStream intStream = new Random().ints(5);
해당 메서드들은 new Ramdom()클래스의 난수 무한스트림을 생성한다.
Integer.MIN_VALUE <= ints() <= Integer.MAX_VALUE;
Long.MIN_VALUE <= longs() <= Long.MAX_VALUE;
0.0 <= doubles() <= 1.0;
나. 저정된 범위의 난수를 요소로 갖는 스트림을 생성하는 메서드(Random 클래스)
// 무한 스트림
IntStream ints(int begin, int end);
LongStream longs(long begin, long end);
DoubleStream doubles(double begin, double end);
// 유한스트림
IntStream ints(long streamSize, int begin, int end);
LongStream longs(long streamSize, long begin, long end);
DoubleStream doubles(long streamSize, double begin, double end);
예제 : 난수의 범위를 지정해서 스트림 생성해보자
IntStream intStream = new Random().ints(5, 10);
intStream.limit(3).forEach(System.out::print);
IntStream intStream2 = new Random().ints(3, 5, 10);
intStream2.forEach(System.out::print);
다. 특정 범위의 정수를 요소로 갖는 스트림 생성하기(IntStream, LongStream)
IntStream intStream = IntStream.range(1, 5); // 1,2,3,4
IntStream intStream2 = IntStream.rangeClosed(1, 5); // 1,2,3,4,5
4. 람다식으로 스트림 만들기
람다식을 소스로 하는 스트림 생성해보자
가. iterator()
사용법)
static <T> Stream<T> iterate(T seed, 단항연산자 람다식 f); // 이전 요소에 종속적
iterator()는 이전 요소를 seed로 해서 다음 요소를 계산한다.
예시)
Stream<Integer> intStream = Stream.iterate(0, n->n+2); //0, 2, 4, 6 ..
나. generate()
사용법)
static <T> Stream<T> generate(Supplier<T> s); // 이전 요소에 독립적
generate()는 seed를 사용하지않는다.
Supplier는 주기만 하고 매개변수X
예시)
Stream<Double> randomStream = Stream.generate(Math::random);
// Math::random
// () -> Math.random();
Stream<Integer> oneSteam = Stream.generate(()->1);
참조 )
[자바의 정석 - 기초편] ch14-17~22 스트림만들기
반응형
'java_basic' 카테고리의 다른 글
Lambda 기초5 최종연산 reduce (0) | 2022.02.16 |
---|---|
Lambda 기초4 중간연산2 (0) | 2022.02.16 |
Lambda 기초4 중간연산1 (2) | 2022.02.14 |
Lambda 기초3 (스트림 중간연산/최종연산 전체 메소드) (0) | 2022.02.01 |
Lambda 기초1 (2) | 2022.02.01 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- elasticsearch
- nginx
- java
- NPM
- 스트림
- 자바8
- JPA
- ngnix
- 차이
- mvn
- 중간연산
- springboot
- map
- Vuex
- Vue
- docker
- ApplicationContext
- AnnotationConfigApplicationContext
- container
- stream
- 최종연산
- 람다
- BeanFactory
- 영속성 컨텍스트
- vscode
- MAC
- Intellij
- webpack
- lambda
- install
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함