본문 바로가기
🌈 백엔드

JAVA_개념_Stream

by 개발자 알마 2023. 2. 26.
반응형

 

 

Stream


for문을 중복으로 사용할수도 있지만 로직이 복잡해질수록 코드 양도 많아지고 로직이 섞이게 되어 간결한 방식을 선택한다 

배열, 컬렉션에 함수 여러개를 조합해서 원하는 결과를 얻기위해 사용한다 

람다를 이용하는 기술중에 하나로 코드 양을 줄이고 간결하게 표현할수 있다 

데이터 소스로부터 데이터를 읽기만 할뿐 데이터소스를 변경하지 않는다

일회용이다 

스트림이 제공하는 연산은 중간연산과 최종연산으로 분류된다 

중간연산은 연산결과가 스트림이고 최종연산은 연산결과가 스트림이 아닌 연산이다

최종연산이 수행되어야 중간연산이 수행된다 

 

 

 

Stream의 진행 과정


1. 생성하기 

2. 가공하기

3. 결과 만들기

 

배열 스트림 선언하기 
Arrays.Stream().메소드().메소드()...

 

 

배열 스트림 생성하기 

String[] arr = new String[]{"a", "b", "c"};

Stream<String> stream = Arrays.stream(arr);

Stream<String> streamOfArrayPart = 

  Arrays.stream(arr, 1, 3); // 1~2 요소 [b, c]

 

컬렉션 스트림 생성하기

public interface Collection<E> extends Iterable<E> {
  default Stream<E> stream() {
    return StreamSupport.stream(spliterator(), false);
  } 
  // ...
}


List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();
Stream<String> parallelStream = list.parallelStream(); // 병렬 처리 스트림

 

null 대신 사용하는 스트림

 

public Stream<String> streamOf(List<String> list) {
  return list == null || list.isEmpty() 
    ? Stream.empty() 
    : list.stream();
}

 

 

 

skip(인덱스) 앞에서부터 인덱스까지 스킵 생략   
limit(갯수) 앞에서부터 limit만큼 제한  
IntStream.range(0,10).skip(3).limit(3).forEach(System.out::parintln); 인덱스 4 , 5 ,6 번만 출력 -> 3 4 5
reduce()

요소들을 하나의 데이터로 만드는 작업   
reduce( (x,y) -> x+y)
reduce(Integer :: sum)
reduce( 1, (x,y) -> x *y)
 
filter() 조건에 맞는 요소를 찾는다   
IntStream.range(0,10).filter(x -> x%2 ==00).forEach(Systerm.out ::Parintln);  
distinct() 중복요소 제거   
IntStream.of(1,1,2,2,3,3,4,4,5),distinct().forEach(System.out::println);  
sorted() 정렬  
map() 요소를 원하는 특정 형태로 변환시킨다  
.map(s -> s.equals("2") ?   
mapToInt() 스트림을 IntStream으로 변환해주는 메서드   
Strea.mapToInt(Integer :: parseInt)  Stream 타입을 기본형 스트림으로 변환
mapToLong()   Stream 타입을 기본형 스트림으로 변환
mapToDouble()   Stream 타입을 기본형 스트림으로 변환
sum() intStream 메서드  
average()  
max()  
min()  
boxed() Wrapper클래스(Stream<Integer>)타입으로 변환한다  
mapToObj() IntStream이 Stream<T>로 변환  
toArray() 스트림을 배열로 변환  
Collect() 최종연산 메서드  
Collectors 스트림을 컬렉션으로 변환한다  
joining() 스트림 요소를 모두 연결한다   
rangeClosed(a,b) a부터 b까지의 범위   

 


 

 사용 예제 

int 타입의 정수를 1부터 n까지의 반복된 값의 합

int sum = IntStream.rangeClosed(1, n).sum();

 

반응형

'🌈 백엔드' 카테고리의 다른 글

JAVA_개념_Character 클래스  (0) 2023.02.24
JAVA_개념_ 문자열 정규표현식  (0) 2023.02.23
JAVA 개념_ASCII 아스키코드  (0) 2023.02.17
JAVA_기초_람다 표현식  (0) 2023.02.16
JAVA 개념_Package 패키지  (0) 2023.02.15

댓글