Java / / 2023. 2. 6. 15:19

Stream 생성하기 - 배열/난수/정수/람다식/파일/empty

반응형

 

스트림 만들기

  1. 스트림 생성
  2. 중간연산(0~N)
  3. 최종연산(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

 

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유