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