[java] Stream api 사용하기 - 01

[java] Stream api 사용하기 - 01

반응형

java 1.8부터 사용가능한 stream api 를 사용해보도록 하겠습니다.

스트림의 경우 기본적으로 아래 순서로 진행됩니다.

stream 생성 ->중간연산(여러번 가능, stream을 반환함) -> 최종연산

-> 대상컬렉션.stream().중간연산.최종연산

1. stream으로 List의 데이터 출력하기

strings 변수명으로 생성된 List를 출력하는 구문입니다.

중간 연산없이 바로 최종연산으로 데이터를 출력합니다.

//데이터 초기화 List strings = new ArrayList(){{ add("A"); add("B"); add("C"); add("d"); }}; strings.stream().forEach(System.out::println);

전체 데이터가 출력된 것을 알 수 있음.

* 여기서 stream() 을 생성하고 최종연산을 한경우, 해당 strem을 다시 사용할 수 없음.

아래와 같이 Stream 을 생성한 후 strStream에 대해 최종연산을 2번 진행하면 2번째 진행하는 연산에서 오류가 발생함.

//데이터 초기화 List strings = new ArrayList(){{ add("A"); add("B"); add("C"); add("d"); }}; Stream strStream = strings.stream(); strStream.forEach(System.out::println); //아래 구문은 오류 발생 strStream.forEach(System.out::println);

exception 발생

->

2. 기본형 배열을 stream으로 변환하기

기본 형 스트링 배열을 선언 하고(String[]) 해당 배열을 스트림으로 변환한 결과이다.

Arrays.stream() 을 통해 스트림 변환이 가능하다.

String[] abc = {"a","b","c"}; Stream stream = Arrays.stream(abc); stream.forEach(System.out::println);

3. 기본형 타입의 스트림

무한 스트림을 생성할 경우에는 사이즈제한을 무조건 해줘야 한다.

특정 범위

-> IntStream.range(1, 5) //끝 자리 숫자 포함하지 않음

-> IntStream.rangeClosed(1, 5); //끝 자리 숫자 포함.

System.out.println("IntStream 출력"); IntStream intStream1 = IntStream.range(1, 5); //[1,2,3,4] 5를 포함하지 않음 IntStream intStream2 = IntStream.rangeClosed(1, 5); //[1,2,3,4,5] 5를 포함 IntStream intStream3 = new Random().ints(); //무한 스트림 생성( 무한으로 임의의 숫자가 생성됨) intStream3.limit(5).forEach(System.out::println); //무한 스트림을 출력할때는 limit으로 사이즈 제한을 해줘야함. //Long type도 가능함. System.out.println("LongStream 출력"); LongStream longStream = LongStream.rangeClosed(1, 5); // [1, 2, 3, 4, 5] longStream.forEach(System.out::println);

4. Stream 생성 iterate , generate

//연산가능! Stream stream = Stream.iterate(0,n->n+4); //stream.forEach(System.out::println); //무한 스트림 발생 ( 출력하면 무한히 계속 실행됨) stream.limit(5).forEach(System.out::println); //limit 으로 제한 [0,4,8,12,16] //파라미터는 없고 출력만함! Stream gen = Stream.generate(()-> 10); gen.limit(5).forEach(System.out::println);//[10,10,10,10,10]

반응형

from http://vmpo.tistory.com/110 by ccl(A) rewrite - 2021-09-14 19:01:43