본문 바로가기

카테고리 없음

스트림?? Stream??으로 원하는 값 추출

예를 들어

List<Map<String, Object>> testList = (List<Map<String, Object>>) result.get("data");

[
   {
      no=1,
      "nm=이xx",
      "sex=M",
      mobileNo=01000000000,
      "email=test01@co.kr"
   },
  {
      no=2,
      "nm=박xx",
      "sex=M",
      mobileNo=01000000001,
      "email=test02@co.kr"
   },
]

라는 List가 있다.

for(Map<String, Object> testMap :testList) {
    System.out.println("@@@@@@@@@@@@@@@@@@"+testMap);
    
    // {no=1,"nm=이xx","sex=M",mobileNo=01000000000,"email=test01@co.kr"}
  	// {no=2,"nm=박xx","sex=M",mobileNo=01000000001,"email=test02@co.kr"}
    
    System.out.println(testMap.get("email"));
    // test01@co.kr
    // test02@co.kr
}

이렇게 for문으로 가능한 부분을 stream으로 바꾼다면

 

 List<String> emailList = testList.stream()
                .filter(d -> "M".equals(d.get("sex")))
                .map(d -> (String) d.get("email"))
                .collect(Collectors.toList());

        System.out.println(emailList);
        //[test01@co.kr, test02@co.kr]
        
        emailList.forEach(email -> System.out.println("Email: " + email));
        // Email: test01@co.kr
        // Email: test02@co.kr

 

  1. testList의 각 맵에서 "sex"가 "M"인 것을 필터링
  2. map을 사용하여 각 데이터에서 "email" 값을 추출
  3. collect 메서드를 사용하여 List<String>으로 수집
  4. forEach를 사용하여 출력