/**
* 测试treeMap的有序性
*/
@Test
public void testTreeMap() {
List<Order> orders = new ArrayList<>();
Order o1 = new Order();
o1.setName("0001.01");
o1.setId(1);
o1.setDescription("111111111");
Order o2 = new Order();
o2.setName("0001.01");
o2.setId(2);
o2.setDescription("22222222");
Order o3 = new Order();
o3.setName("0001.02 ");
o3.setId(3);
o3.setDescription("b 333333333333333");
Order o4 = new Order();
o4.setName("0001.02");
o4.setId(4);
o4.setDescription("d 4444444");
Order o5 = new Order();
o5.setName("0001.03");
o5.setId(5);
o5.setDescription("5555555555");
orders.add(o5);
orders.add(o4);
orders.add(o3);
orders.add(o2);
orders.add(o1);
// TreeMap底层是根据红黑树的数据结构构建的,默认是根据key的自然排序来组织(比如integer的大小,String的字典排序)。
// 所以,TreeMap只能根据key来排序
Map<String, List<Order>> treeMap = orders.stream()
.collect(Collectors.groupingBy(Order::getName,TreeMap::new,Collectors.toList()));
System.out.println(treeMap);
// 让treeMap 降序
TreeMap<String,List<Order>> descTreeMap= new TreeMap<String,List<Order>>(new Comparator<String>(){
public int compare(String a,String b){
return b.compareTo(a);
}
});
Map<String, List<Order>> hashMap = orders.stream()
.collect(Collectors.groupingBy(Order::getName,HashMap::new,Collectors.toList()));
// map 在java8的第一种遍历方式
hashMap.forEach((k, v) ->{
descTreeMap.put(k,v);
});
// map 在java8的第二种遍历方式
// hashMap.keySet().forEach(key -> descTreeMap.put(key,hashMap.get(key)));
System.out.println(descTreeMap);
}