부트캠프/코드스테이츠 백엔드부트캠프 43기

코드스테이츠 백엔드 부트캠프 43기 (18일차-스트림 회고)

고구마는호박고구마 2023. 1. 9. 23:51
스트림 요약 정리

 

 

처음 스트림을 배울때 스트림에 대해 어색하면서 여러 메서드들이 줄줄이 나오니깐 매우 어렵게 느껴졌었다. 하지만 문제를 하나하나 풀면서 메서드 하나하나 이해하려고하니 스트림은 정말로 편하고 가독성이 좋은 코드가 나올 수 있었다. 

 


스트림 - (생성, 중간 연산, 최종 연산)

 

중간 연산

 

 

distinct() - 중복된 값을 제거 해준다.

 

 

 

sorted() - 값을 사전순으로 정렬 해준다.

 

 

 

 

map() 

 - 스트림에 들어있는 변수를 바꾸는 기능 (스트림 자체에 있는 변수가 바뀜)

 - Ex) map( x - > x*2) x의 값들이 2로 곱해진 값들로 변함

 - 스트림에 "김가나", "박가나" 의 값들이 있다면 // 밑에 filter의 예도 있음

 - map (m -> m.substring(0, 1)) -> 스트림 자체에 있는 변수의 값이 "김", "박" 으로 바뀜 

 

 

 

 

mapToInt() 

 - map이랑 비슷한 기능이다. Integer타입의 리스트를 받았다면 그 값을 마지막에 IntStream로 변화해주는 기능이다. ->왜? 집계함수(max, average) 의 숫자처리 메서드는 IntStream에서 정의되어있기 떄문

 - Ex) mapToInt( x -> x) int 값으로 바뀜 

 - mapToDouble, 등 다양하게 있음

 

String[] strArr = {"codestates", "java", "backend", "programing"};
int max = Arrays.stream(strArr).mapToInt(n->n.length()).max().getAsInt();

 

//programming 오타... 

 

1. Arrays.stream(strArr)

2. Array.stream(strArr).mapToint( n -> n.length())

 

 

3. Array.stream(strArr).mapToint( n -> n.length()).max()

4. Array.stream(strArr).mapToint( n -> n.length()).max().getAsInt()

 -> int 나 Integer 타입으로 받기 위해서.

 

 

 

 

 

filter() 

 - 어떠한 값을 거를때 사용한다. (스트림 자체에 있는 변수가 바뀌지 않음)

 - 스트림에 2,3,4,5 의 값들이 있다면 filter( m -> m%2==0 ) -> 2,4 만 걸러지는 기능 -

 - 스트림에 "김가나", "박가나" 의 값들이 있다면 성이 김씨인 사람만 거르고 싶을때

filter (m -> m.substring(0, 1).equals("김")) -> "김가나"만 걸러지게 됨 -> substring으로 자르게 되어도 자체에 있는 변수가 바뀌지는 않음.   

첫글자를 찾고 거를때 던 간편한 메서드 -> filter( m -> m.startsWith("김")) "김가나"만 걸러지게 됨 // String타입만 가능 

 

 

 

 


최종 연산 

 

sum() - long 타입

count()  - long 타입

max() - 최대값 출력 OptionaInt 타입 -> Integer, int 로 받으려면 마지막에 getAsInt() 메서드로 매핑이 필요. 

min()

average()

orElse(0.0) - null 값을 처리 해줌 ( 진짜 0값인지 아니면 없어서 0인지를 처리 )

toArray(String[]::new) - 스트림을 배열로 리턴할 경우

collect(Collectors.toList()) - 컬렉터 리턴할 경우 

Stream.concat(스트림 변수1, 스트림 변수2) // 스트림1, 스트림2를 붙여서 새로운 Stream 변수를 리턴함