java 1.8부터 사용가능한 stream api 를 사용해보도록 하겠습니다.
스트림의 경우 기본적으로 아래 순서로 진행됩니다.
stream 생성 ->중간연산(여러번 가능, stream을 반환함) -> 최종연산 -> 대상컬렉션.stream().중간연산.최종연산 |
1. stream으로 List의 데이터 출력하기
strings 변수명으로 생성된 List를 출력하는 구문입니다.
중간 연산없이 바로 최종연산으로 데이터를 출력합니다.
//데이터 초기화
List<String> strings = new ArrayList(){{
add("A");
add("B");
add("C");
add("d");
}};
strings.stream().forEach(System.out::println);
전체 데이터가 출력된 것을 알 수 있음.
* 여기서 stream() 을 생성하고 최종연산을 한경우, 해당 strem을 다시 사용할 수 없음.
아래와 같이 Stream<String> 을 생성한 후 strStream에 대해 최종연산을 2번 진행하면 2번째 진행하는 연산에서 오류가 발생함.
//데이터 초기화
List<String> strings = new ArrayList(){{
add("A");
add("B");
add("C");
add("d");
}};
Stream<String> 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<String> 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<Integer> 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<Integer> gen = Stream.generate(()-> 10);
gen.limit(5).forEach(System.out::println);//[10,10,10,10,10]
LIST
'Java > 기본' 카테고리의 다른 글
[java] Stream api 사용하기 - 02 (0) | 2021.10.01 |
---|---|
[java] sha-256 해싱 알고리즘 사용하기 (0) | 2021.09.15 |
[java] 상속의 개념 알아보기 (0) | 2020.03.21 |
[java] cpu, memory usage monitoring sample (0) | 2019.10.20 |
java 멀티쓰레드 간단 테스트 (0) | 2019.10.20 |
최근댓글