반응형
스트림 만들기
- 스트림 생성
- 중간연산(0~N)
- 최종연산(0~1)
스트림 생성
✔ Collection 인터페이스의 Stream()으로 컬렉션을 스트림으로 변환
Stream<E> stream() //Collection 인터페이스의 메서드
List<Integer> list = Arrays.asList(1,2,3,4,5);
Stream<Integer> intStream = list.stream(); //List를 스트림으로 변환
//스트림의 모든 요소를 출력
intStream.forEach(System.out::Print); //forEach() - 최종연산 //12345
intStream.forEach(System.out::Print); //error. 스트림이 이미 위에서 닫혔음.(stream은 1회용)
참고 : 최종 연산은 한번 수행하고 나면 스트림을 새로 만들어야 사용할 수 있다.
1. 스트림 만들기 - 배열
✔ 객체 배열로부터 스트림 생성하기
Stream<T> Stream.of(T... values) //가변인자
Stream<T> Stream.of(T[])
Stream<T> Arrays.stream(T[])
Stream<T> Arrays.stream(T[] array, int startInclusive, 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"});
Stream<String> strStream = Arrays.stream(new String[]{"a","b","c"},0,3);
✔ 기본형 배열로부터 스트림 생성하기
IntStream IntStream.of(int... values) //Stream이 아니라 IntStream
IntStream IntStream.of(int[])
IntStream Arrays.stream(int[])
IntStream Arrays.stream(int[] array, int startInclusive, int endExclusive)
Stream<String> strStream = Stream.of("a","b","c");//가변인자
strStream.forEach(System.out::print);//abc
Stream<String> strStream = Stream.of(new String[]{"a","b","c"});
strStream.forEach(System.out::print);//abc
IntStream intStream = Arrays.stream(new String[]{1,2,3,4,5});
//intStream.forEach(System.out::print);//12345
//System.out.println("count="+intStream.count());//5 //최종연산이라서 스트림 한번만 사용가능
//System.out.println("sum="+intStream.sum());//15
System.out.println("average="+intStream.average());//3.0
Stream<String> strStream = Arrays.stream(new String[]{"a","b","c"},0,3);
Stream<T>는 숫자 이외에도 여러 타입의 스트림이 존재하기 때문에, 숫자 스트림에만 사용할 수 있는 sum(), average()등이 없는 것이다.
2. 스트림 만들기 - 임의의 수(난수)
✔ 난수를 요소로 갖는 스트림 생성
IntStream intStream = new Random().ints(); //무한 스트림
intStream.limit(5).forEach(System.out::print); //5개의 요소만 출력한다.
IntStream intStream = new Random().ints(5); //먼저 size 지정 //크기가 5인 난수 스트림을 반환
✔ 지정된 범위의 난수를 요소로 갖는 스트림을 생성하는 메서드(Random Class)
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)
해당 포스팅은 자바의정석 인터넷 강의를 참고하여 작성한 글입니다.
필요하다면 자바의정석 강의나 책을 추가로 참고해도 좋을 것 같습니다.
3. 스트림 만들기 - 특정 범위의 정수
✔ 특정 범위의 정수를 요소로 갖는 스트림 생성하기(IntStream, LongStream)
IntStream IntStream.range(int begin, int end) //end 포함 x
IntStream IntStream.rangeClosed(int begin, int end) //end 포함 o
IntStream intStream = IntStream.range(1,5) //1,2,3,4
IntStream intStream = IntStream.rangeClosed(1,5) //1,2,3,4,5
4. 스트림 만들기 - 람다식 iterate(), generate()
✔ 람다식을 소스로 하는 스트림 생성하기
- Iterate() : 이전 요소를 seed(초기값)로 해서 다음 요소를 계산한다.
- generate() : seed(초기값)를 사용하지 않는다.
static <T> Stream<T> iterate(T seed, UnaryOperator<T> f) //이전 요소에 종속적
static <T> Stream<T> generate(Supplier<T> s) //이전 요소에 독립적 //Supplier - 입력 x, 출력 o
Stream<Integer> intStream = Stream.iterate(0, n->n+2); //0,2,4,6,... //무한 스트림
intStream.limit(10).forEach(System.out::print);//0,2,4,6,8,10,12,14,16,18
Stream<Double> randomStream = Stream.generate(Math::random); //() -> Math.random()
Stream<Integer> oneStream = Stream.generate(()->1); //1,1,1,1,...
5. 스트림 만들기 - 파일과 빈(empty) 스트림
✔ 파일을 소스로 하는 스트림 생성하기
Stream<Path> Files.list(Path dir) //path는 파일 또는 디렉토리 //dir : 폴더 경로
Stream<String> Files.lines(Path path) //파일의 내용을 라인단위로 읽어서 String으로 만듦
Stream<String> Files.lines(Path path, Charset cs)
Stream<String> lines() //BufferedReader 클래스의 메서드
로그 파일 분석 및 다량의 텍스트 파일 처리에 유리하다.
✔ 비어있는 스트림 생성하기
Stream emptyStream = Stream.empty(); //empty()는 빈 스트림을 생성해서 반환한다.
long count = emptyStream.count(); //count 값은 0
반응형
'Java' 카테고리의 다른 글
[Spring Boot] Spring Security + OAuth2.0 + JWT 소셜 로그인 구현 정리(Google, Kakao ...) (1) | 2023.10.12 |
---|---|
Window 환경에 SDKMAN 설치하여 사용하기 (gitbash) (1) | 2023.02.14 |
스트림(Stream)과 스트림의 특징 (0) | 2023.02.03 |
메서드 참조(method reference) - 람다식을 더 간단하게 (0) | 2023.02.02 |
Predicate 결합 방법 / 컬렉션과 함수형 인터페이스 사용 (0) | 2023.02.01 |