java中的HashMap
是无序的,有序容器可用LinkedHashMap
在cmopare
接口中,Integer
或者Date
通过compareTo
方法进行对象比较时,“比较对象” 比 “被比较对象” 大时返回-1,相等时返回0,小则返回1。
public class ContainerHelper {
/**
* 将容器按照日期、数字等类型的键,排序
*
* @param map
* @param orderRule 0为升序,1为降序
* @param keyType 0为数字类型 1为日期类型 2为时间格式的字符串
* @return
*/
public static Map containerSortByKey(Map map, Integer keyType, Integer orderRule) {
if (ConstantHelper.NUMBER_0 == keyType) {
List<Map.Entry<Integer, Object>> keyList = new ArrayList<Map.Entry<Integer, Object>>(map.entrySet());
Collections.sort(keyList, new Comparator<Map.Entry<Integer, Object>>() {
@Override
public int compare(Map.Entry<Integer, Object> o1, Map.Entry<Integer, Object> o2) {
return ConstantHelper.NUMBER_0 == orderRule ? o1.getKey().compareTo(o2.getKey()) : o2.getKey().compareTo(o1.getKey());
}
});
HashMap<Integer, Object> resultMap = new LinkedHashMap<>();
for (Map.Entry<Integer, Object> entry : keyList) {
resultMap.put(entry.getKey(), entry.getValue());
}
return resultMap;
} else if (ConstantHelper.NUMBER_1 == keyType) {
List<Map.Entry<Date, Object>> keyList = new ArrayList<Map.Entry<Date, Object>>(map.entrySet());
Collections.sort(keyList, new Comparator<Map.Entry<Date, Object>>() {
@Override
public int compare(Map.Entry<Date, Object> o1, Map.Entry<Date, Object> o2) {
return ConstantHelper.NUMBER_0 == orderRule ? o1.getKey().compareTo(o2.getKey()) : o2.getKey().compareTo(o1.getKey());
}
});
HashMap<Date, Object> resultMap = new LinkedHashMap<>();
for (Map.Entry<Date, Object> entry : keyList) {
resultMap.put(entry.getKey(), entry.getValue());
}
return resultMap;
} else if (ConstantHelper.NUMBER_2 == keyType) {
List<Map.Entry<String, Object>> keyList = new ArrayList<Map.Entry<String, Object>>(map.entrySet());
Collections.sort(keyList, new Comparator<Map.Entry<String, Object>>() {
@Override
public int compare(Map.Entry<String, Object> o1, Map.Entry<String, Object> o2) {
String timeStamp01 = o1.getKey();
String timeStamp02 = o2.getKey();
return ConstantHelper.NUMBER_0 == orderRule ? DateHelper.getDateByStr(timeStamp01, DateHelper.DATE_PATTERN_03)
.compareTo(DateHelper.getDateByStr(timeStamp02, DateHelper.DATE_PATTERN_03))
: DateHelper.getDateByStr(timeStamp02, DateHelper.DATE_PATTERN_03)
.compareTo(DateHelper.getDateByStr(timeStamp01, DateHelper.DATE_PATTERN_03));
}
});
HashMap<String, Object> resultMap = new LinkedHashMap<>();
for (Map.Entry<String, Object> entry : keyList) {
resultMap.put(entry.getKey(), entry.getValue());
}
return resultMap;
}
return null;
}
/**
* 将容器按照日期、数字等类型的值,排序
*
* @param map
* @param valueType 0为数字类型 1为日期类型
* @param orderRule 0为升序,1为降序
* @return
*/
public static Map containerSortByValue(Map map, Integer valueType, Integer orderRule) {
if (ConstantHelper.NUMBER_0 == valueType) {
List<Map.Entry<Object, Integer>> valueList = new LinkedList<Map.Entry<Object, Integer>>(map.entrySet());
Collections.sort(valueList, new Comparator<Map.Entry<Object, Integer>>() {
@Override
public int compare(Map.Entry<Object, Integer> o1, Map.Entry<Object, Integer> o2) {
return ConstantHelper.NUMBER_0 == orderRule ? o1.getValue().compareTo(o2.getValue()) : o2.getValue().compareTo(o1.getValue());
}
});
HashMap<Object, Integer> resultMap = new LinkedHashMap<>();
for (Map.Entry<Object, Integer> entry : valueList) {
resultMap.put(entry.getKey(), entry.getValue());
}
return resultMap;
} else if (ConstantHelper.NUMBER_1 == valueType) {
List<Map.Entry<Object, Date>> valueList = new LinkedList<Map.Entry<Object, Date>>(map.entrySet());
Collections.sort(valueList, new Comparator<Map.Entry<Object, Date>>() {
@Override
public int compare(Map.Entry<Object, Date> o1, Map.Entry<Object, Date> o2) {
return ConstantHelper.NUMBER_0 == orderRule ? (o1.getValue().compareTo(o2.getValue())) : (o2.getValue().compareTo(o1.getValue()));
}
});
HashMap<Object, Date> resultMap = new LinkedHashMap<>();
for (Map.Entry<Object, Date> entry : valueList) {
resultMap.put(entry.getKey(), entry.getValue());
}
return resultMap;
} else if (ConstantHelper.NUMBER_2 == valueType) {
List<Map.Entry<Object, String>> keyList = new ArrayList<Map.Entry<Object, String>>(map.entrySet());
Collections.sort(keyList, new Comparator<Map.Entry<Object, String>>() {
@Override
public int compare(Map.Entry<Object, String> o1, Map.Entry<Object, String> o2) {
String timeStamp01 = o1.getValue();
String timeStamp02 = o2.getValue();
return ConstantHelper.NUMBER_0 == orderRule ? DateHelper.getDateByStr(timeStamp01, DateHelper.DATE_PATTERN_03)
.compareTo(DateHelper.getDateByStr(timeStamp02, DateHelper.DATE_PATTERN_03))
: DateHelper.getDateByStr(timeStamp02, DateHelper.DATE_PATTERN_03)
.compareTo(DateHelper.getDateByStr(timeStamp01, DateHelper.DATE_PATTERN_03));
}
});
HashMap<Object, String> resultMap = new LinkedHashMap<>();
for (Map.Entry<Object, String> entry : keyList) {
resultMap.put(entry.getKey(), entry.getValue());
}
return resultMap;
}
return null;
}
}