Java中map按值排序
2018-04-22 23:12阅读:
本文提供一个排序工具类,用于Java中的map如何按照value进行排序。工具类基于泛型参数,更具有通用性。
下面用这个工具类实现一个简单的需求:根据map中vlue的size进行生序排练。map的vlue也是一个map类型的对象。
1.map排序工具类
1.
import java.util.*;
2.
3.
6.
public
class
MapSortUtil {
7.
8.
17.
public
static
Map sortMapByValue(Map oriMap,
Comparator comparator) {
18.
if
(oriMap ==
null ||
oriMap.isEmpty()) {
19.
return
oriMap;
20.
}
21.
Map sortedMap =
new
LinkedHashMap<>();
22.
List> entryList =
new
ArrayList<>(oriMap.entrySet());
23.
Collections.sort(entryList,
comparator);
24.
25.
Iterator> iterator
= entryList.iterator();
26.
Map.Entry tmpEntry;
27.
while
(iterator.hasNext()) {
28.
tmpEntry = iterator.next();
29.
sortedMap.put(tmpEntry.getKey(),
tmpEntry.getValue());
30.
}
31.
return
sortedMap;
32.
}
33. }
2.实现comparator构造器
1.
import java.math.BigDecimal;
2.
import java.util.Comparator;
3.
import java.util.Map;
4.
5.
8.
public
class
TestComparator
implements
Comparator>> {
9.
10.
@Override
11.
public
int
compare(Map.Entry> o1, Map.Entry>
o2) {
12.
return
o1.getValue().size() -
o2.getValue().size();
13.
}
14. }
3. 测试方法
1.
public
static
void
main(String[] args) {
2.
Map>
skuOriMap = Maps.newHashMap();
3.
Map
skuMap1 = Maps.newHashMap();
4.
skuMap1.put('sku1',
new
BigDecimal(2));
5.
skuMap1.put('sku2',
new
BigDecimal(1));
6.
skuMap1.put('sku3',
new
BigDecimal(3));
7.
skuOriMap.put('map1',
skuMap1);
8.
9.
Map
skuMap2 = Maps.newHashMap();
10.
skuMap2.put('sku1',
new
BigDecimal(2));
11.
skuOriMap.put('map2',
skuMap2);
12.
13.
Map skuMap3 =
Maps.newHashMap();
14.
skuMap3.put('sku1',
new
BigDecimal(2));
15.
skuMap3.put('sku2',
new
BigDecimal(21));
16.
skuOriMap.put('map3',
skuMap3);
17.
18.
System.out.println('======排序前======='
+ skuOriMap);
19.
20.
Map> skuSortMap =
MapSortUtil.sortMapByValue(skuOriMap,
new
TestComparator());
21.
System.out.println('======排序后====='
+ skuSortMap);
}
4. 测试结果
1.
======排序前======={map3={sku2=21,
sku1=2},
map2={sku1=2},
map1={sku2=1,
sku1=2,
sku3=3}}
2.
======排序后====={map2={sku1=2},
map3={sku2=21,
sku1=2},
map1={sku2=1,
sku1=2,
sku3=3}}
从控制台打印出的输出信息可以看出,map根据vule自定义的规则进行了排序。
这个工具类使用起来很方便,大家只需要根据排序规则自定义实现Compartor排序类即可。