IT/Java, Spring

리스트 내부 키워드 검색

K_sun 2021. 1. 3. 21:46

리스트 List<Map> 내부 키워드 검색

 

데이터 목록을 불러올 때, List<VO객체> 혹은 List<Map<String, Object>>형식으로 "key" "value" 쌍으로 구성된 리스트 에 담아서 가져오는 경우가 많은데요, 이번 예제에서는 다음과 같은 샘플데이터에서 "city"와 "gender" 키워드 검색을 구현해보겠습니다.

HashMap으로 구성된 ArrayList 샘플

 

1. 각 경우의 수에 대한 개별 처리

public static void searchList1(List<Map<String, Object>> list, String city, String gender) {
 /* 리스트 내부 검색 method1 */
 System.out.println("search >> 도시: "+city+" , 성별: "+gender);
	
 List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
  for(int i=0; i<list.size(); i++) {
    Map<String, Object> tempMap = list.get(i);
    if( "".equals(city) && "".equals(gender) ) {
      // 1) 검색조건 없음
      resultList = list;
    }else if( "".equals(city) && "".equals(gender) ) {
      // 2) 도시만 검색
      if( city.equals(tempMap.get("city")) ) {
      	resultList.add(tempMap);
      }
    }else if( "".equals(city) && "".equals(gender) ) {
      // 3) 성별만 검색
      if( gender.equals(tempMap.get("gender")) ) {
      	resultList.add(tempMap);
      }
    }else if( !("".equals(city) && "".equals(gender)) ) {
      // 4) 도시,성별 검색
      if( city.equals(tempMap.get("city")) && gender.equals(tempMap.get("gender")) ) {
      	resultList.add(tempMap);
      }
    }
  }
	
  int resultCnt = resultList.size();
  if(resultCnt>0) {
    System.out.println(resultList);
  }else {
    System.out.println("일치하는 항목이 존재하지 않습니다.");
  }
}

샘플데이터(list), 도시(city), 성별(gender) 값이 전달되어 검색을 수행합니다.

 - for문으로 샘플데이터(list)의 개별Map 요소에 대하여 검색 실시합니다.

 - 검색조건인 도시/성별 값의 존재여부(1~4의 네가지 경우)에 따라서, 선택된Map에서 해당Key의 Value와 일치하면 최종리스트(resultList)에 해당Map을  추가합니다.

 

<결과 예시>

 

 

2. 위의 코드를 삼항연산자를 통하여 간략하게 줄일 수 있습니다. 

public static void searchList2(List<Map<String, Object>> list, String city, String gender) {
 /* 리스트 내부 검색 method2 */
 System.out.println("search >> 도시: "+city+" , 성별: "+gender);
 
 List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
 for(int i=0; i<list.size(); i++) {
   Map<String, Object> tempMap = list.get(i);
   if((!"".equals(city) ? city.equals(tempMap.get("city")) : true ) && 
     (!"".equals(gender) ? gender.equals(tempMap.get("gender")) : true )){
       resultList.add(tempMap);
   }
 }
 
 int resultCnt = resultList.size();
 if(resultCnt>0) {
   System.out.println(resultList);
 }else {
   System.out.println("일치하는 항목이 존재하지 않습니다.");
 }
}

 - 전달받은 "city"값이 있으면, 키워드 일치여부 검사 city.equalscity.equals(tempMap.get("city")) 수행하고, 없으면 true값을 반환하여 조건 pass

 - 전달받은 "gender"값이 있으면, 키워드 일치여부 검사 gender.equalscity.equals(tempMap.get("gender")) 수행하고, 없으면 true값을 반환하여 조건 pass

 

<결과 예시>

 

 

cf. 삼항연산자 

 - 삼항연산자의 형식

  ( 조건 ) ? (true의 경우) : (false의 경우

 - 사용 예

  String check = ( 5 < 6 ) ? "참 입니다." : "거짓 입니다." 

  =>check에 "참 입니다" 가 대입됩니다.

 

 

※ 자바코드 전문을 확인하고싶으시다면 여기 를 클릭하여 주세요.

'IT > Java, Spring' 카테고리의 다른 글

이클립스, 전자정부프레임워크 단축키/사용 팁  (0) 2021.01.10