일할 때 자주 쓰긴 하는데 사실 확실히 아는상태에서 쓰는게 아니라 얼레벌레 쓰는 것 같아서..
stream 연습문제를 풀기 전에 여러 케이스를 짜보면서 공부해봤다..
실험대상은 맵으로 만들어진 리스트와 스트링 리스트 두개,,
Map<String,String> map = Map.of("두산","김현수","키움","이지영","샌디애고","김하성");
Map<String,String> map2 = Map.of("키움","승리를 위한 함~성","두산","걸어간다 양의지","기아","기아의 김~주찬");
List<Map<String,String>> mapList = List.of(map,map2);
List<String> stringList = List.of("Kiwoom","Hanhwa","Doosan", "heroes");
map : 기존의 stream 요소들을 변환하여 새로운 stream을 생성한다.
// 1
List<String> collect = mapList.stream() // stream을 생성
.map(test -> test.get("두산"))
.collect(Collectors.toList());
System.out.println("collect = " + collect); // collect = [김현수, 걸어간다 양의지]
key 값이 "두산"인 value 두개를 찾아서 리스트로 만들어준다. 김현수와 볼넷으로 걸어나가는 양의지가 선정되었다.
List<String> strings = stringList.stream()
.map(test -> test.toUpperCase())
.collect(Collectors.toList());
System.out.println("strings = " + strings); // strings = [KIWOOM, HANHWA, DOOSAN, HEROES]
string list에서 map method를 사용할 때는 이렇게 요소들을 변환시킬 수 있다.
String으로 구성된 List를 쪼개주면 List<String[]> 형태의 값이 나온다.
List<String[]> collect = stringList.stream()
.map(s -> s.split(""))
.collect(Collectors.toList());
[Kiwoom,Hanhwa,Doosan, heroes] -> {[K,i,w,o,o,m], [H,a,...], [...], [...]}
filter : 조건에 맞는 데이터로 컬렉션 구성, boolean 반환하는 람다식 작성한다.
List<String> strings1 = stringList.stream()
.filter(s -> s.contains("a"))
.collect(Collectors.toList());
System.out.println("strings1 = " + strings1); //strings1 = [Hanhwa, Doosan]
stringList에 'a'가 포함된 요소들이 출력된다.
List<Map<String, String>> collect1 = mapList.stream()
.filter(test -> test.get("두산").equals("김현수"))
.collect(Collectors.toList());
System.out.println("collect1 = " + collect1); //collect1 = [{샌디애고=김하성, 키움=이지영, 두산=김현수}]
filter는 요소를 변환시키는 것이 아니라 필터링만 해주는 것이기 때문에 형태가 List<Map<String, String>> 으로 나온다.!!!!!!!!!! 그래서 두산에 김현수가 있는 map이 출력된다.
List<String> collect2 = mapList.stream()
.filter(test -> test.get("두산").equals("김현수"))
.map(s-> s.get("두산"))
.collect(Collectors.toList());
System.out.println("collect2 = " + collect2); //collect2 = [김현수]
위의 상태에서 map을 사용하여 key가 "두산" 인 것만 추리면 이때 나오는 형태는 List<String> 형태가 되고 김현수가 출력된다. 1번코드에서 필터없이 사용했을 땐 김현수와 걸어가는 양의지가 출력됐지만 이제는 김현수만 나오는 것이다.
'TIL' 카테고리의 다른 글
[TIL] 프로그래머스 숫자의 표현 효율성 테스트 실패ㅠㅠ (1) | 2023.11.03 |
---|---|
[TIL] Stream API method 탐구2, 객체 리스트와 map, flatMap (0) | 2023.10.27 |
[TIL] Spring Security 하나의 url에 두 개의 역할이 가능하도록 권한을 주고싶다 (0) | 2023.10.15 |
[TIL] 반성의 TIL... Junit MockMvc.perform 에서 session 사용하기.. (0) | 2023.10.12 |
[TIL] login with oauth 2.0 페이지 수정해보기.. /login (0) | 2023.09.24 |