Map 에서 Key를 대문자 또는 소문자로 일괄되게 해야한다거나,
혹은 보편적으로 쓰이는 변수네임작성방식을 일관되게 해주고 싶을때 쓰면 좋을 듯 하다.
해당 클래스는 2개의 기능을 가진다.
1) Key 값의 대소문자 변경
2) Key 값을 value_type => valueType 으로 변경(반대도 가능)
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* 1) Key 값의 대소문자 변경
* 2) Key 값을 value_type => valueType 등으로 변경
*/
public class DataKeySetUtil {
/***********************************************************************
* Key 값의 대문자를 소문자로 변경
*
* @param map
* @return list
***********************************************************************/
public static List keyChangeLowerList(List<Map> list) {
List<HashMap> newList = new LinkedList<HashMap>();
for (int i = 0; i < list.size(); i++) {
HashMap<String, Integer> tm = new HashMap<String, Integer>(list.get(i));
Iterator<String> iteratorKey = tm.keySet().iterator(); // 키값 오름차순
HashMap newMap = new HashMap();
// //키값 내림차순 정렬
while (iteratorKey.hasNext()) {
String key = iteratorKey.next();
newMap.put(key.toLowerCase(), tm.get(key));
}
newList.add(newMap);
}
return newList;
}
/***********************************************************************
* Key 값의 대문자를 소문자로 변경
*
* @param map
* @return map
***********************************************************************/
public static HashMap keyChangeLowerMap(Map param) {
Iterator<String> iteratorKey = param.keySet().iterator(); // 키값 오름차순
HashMap newMap = new HashMap();
// //키값 내림차순 정렬
while (iteratorKey.hasNext()) {
String key = iteratorKey.next();
newMap.put(key.toLowerCase(), param.get(key));
}
return newMap;
}
/***********************************************************************
* key를 size_cd_test => sizeCdTest 으로 문자열 변경.
*
* @param map
* @return
***********************************************************************/
// HashMap 으로 리턴
public static HashMap keyConvStyleClient(HashMap map) {
Iterator<String> iterKey = map.keySet().iterator();
HashMap newMap = new HashMap();
while (iterKey.hasNext()) {
String key = iterKey.next();
String typeName = map.get(key).getClass().getSimpleName();
if (typeName.indexOf("List") >= 0) { // 리스트로 간주.
List<Map> newList = new LinkedList<Map>();
List subList = (List) map.get(key);
for (int i = 0; i < subList.size(); i++) {
Map subItem = (Map) subList.get(i);
newList.add(keyConvStyleClient(subItem));
}
newMap.put(convertVariableRevert(key), newList);
} else {
newMap.put(convertVariableRevert(key), map.get(key));
}
}
return newMap;
}
// Map 으로 리턴
public static Map keyConvStyleClient(Map map) {
Iterator<String> iterKey = map.keySet().iterator();
Map newMap = new HashMap();
while (iterKey.hasNext()) {
String key = iterKey.next();
String typeName = map.get(key).getClass().getSimpleName();
if (typeName.indexOf("List") >= 0) { // 리스트로 간주.
List<Map> newList = new LinkedList<Map>();
List subList = (List) map.get(key);
for (int i = 0; i < subList.size(); i++) {
Map subItem = (Map) subList.get(i);
newList.add(keyConvStyleClient(subItem));
}
newMap.put(convertVariableRevert(key), newList);
} else {
newMap.put(convertVariableRevert(key), map.get(key));
}
}
return newMap;
}
/***********************************************************************
* key를 sizeCdTest => size_cd_test 으로 변경하여 HashMap 구성.
*
* @param map
* @return
***********************************************************************/
// HashMap 리턴
public static HashMap keyConvStyleDB(HashMap map) {
Iterator<String> iterKey = map.keySet().iterator();
HashMap newMap = new HashMap();
while (iterKey.hasNext()) {
String key = iterKey.next();
String typeName = map.get(key).getClass().getSimpleName();
if (typeName.indexOf("List") >= 0) { // 리스트로 간주.
List<Map> newList = new LinkedList<Map>();
List subList = (List) map.get(key);
for (int i = 0; i < subList.size(); i++) {
Map subItem = (Map) subList.get(i);
newList.add(keyConvStyleDB(subItem));
}
newMap.put(convertVariable(key), newList);
} else {
newMap.put(convertVariable(key), map.get(key));
}
}
return newMap;
}
// Map 으로 리턴
public static Map keyConvStyleDB(Map map) {
Iterator<String> iterKey = map.keySet().iterator();
Map newMap = new HashMap();
while (iterKey.hasNext()) {
String key = iterKey.next();
String typeName = map.get(key).getClass().getSimpleName();
if (typeName.indexOf("List") >= 0) { // 리스트로 간주.
List<Map> newList = new LinkedList<Map>();
List subList = (List) map.get(key);
for (int i = 0; i < subList.size(); i++) {
Map subItem = (Map) subList.get(i);
newList.add(keyConvStyleDB(subItem));
}
newMap.put(convertVariable(key), newList);
} else {
newMap.put(convertVariable(key), map.get(key));
}
}
return newMap;
}
/**
* key를 size_cd_test => sizeCdTest 으로 문자열 변경.
*/
static String convertVariableRevert(String key) {
StringBuffer sb = new StringBuffer(); // 새로 생성
for (int i = 0; i < key.length(); i++) {
String str = String.valueOf(key.charAt(i));
if (str.equals("_")) {
sb.append(String.valueOf(key.charAt(i + 1)).toUpperCase());
i++;
} else {
sb.append(str);
}
}
return sb.toString();
}
/**
* key를 sizeCdTest => size_cd_test 으로 문자열 변경.
*/
static String convertVariable(String key) {
StringBuffer sb = new StringBuffer(); // 새로 생성
for (int i = 0; i < key.length(); i++) {
char ch = key.charAt(i);
if (Character.isUpperCase(ch) == true) {
sb.append("_" + String.valueOf(ch).toLowerCase());
} else {
sb.append(ch);
}
}
return sb.toString();
}
}
'공부 > 프로그래밍' 카테고리의 다른 글
[JS] H 태그에 넘버링 하기. (0) | 2017.09.19 |
---|---|
[JAVA] 세션값 살펴보기. (0) | 2017.09.13 |
[JAVA] MAP 이나 LIST 를 JSON으로 변경하기. (0) | 2017.09.08 |
[JS] 숫자만 입력하기 (0) | 2017.09.07 |
div 에 vertical-align을 middle 주기.(세로 가운데 정렬) (0) | 2017.09.07 |
댓글