单个List<Map<String,Object>> 排序,引用的是java8 List sort代码如下,此处的sort是用了Arrays.sort(a, (Comparator) c)非常强大,试了下十万级别的数据量,速度也是杠杠的。
//升序
productNetList.sort(Comparator.comparing(e -> e.get("hs").toString()));
//对于特定user对象处理
// 按照List中对象的id属性降序
productNetList.sort(Comparator.comparing(User::getId).reversed());
// 多个条件升序
productNetList.sort(Comparator.comparing(User::getId).thenComparing(User::getBigId));
// id升序,deId降序
productNetList.sort(Comparator.comparing(User::getId).reversed().thenComparing(User::getBigId));
// Collection升序排序
Collections.sort(user, new Comparator(){
public int compare(User p1, User p2) {
return Integer.parseInt(p1.getBigId()) - Integer.parseInt(p2.getBigId());
}
});
单个List<Map<String,Object>> 根据object里面的某个属性值去重,根据set无重复值的特性重新创建一个set.
productNetList = productNetList.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(p -> p.get("hs300").toString()))),
ArrayList::new));
两个List<Map<String,Object>> 根据某相同的属性值取交集
List<Map<String, Object>> andList = list1.parallelStream()
.filter(item -> list2.parallelStream()
.map(e -> e.get("rq").toString()).collect(Collectors.toList()).contains(item.get("rq").toString()))
.collect(Collectors.toList());
两个List<Map<String,Object>>根据某相同的属性值合并
list1.addAll(list2);
List<Map<String, Object>> combine = list1.parallelStream()
.collect(Collectors.groupingBy(group -> group.get("rq").toString())) // 根据map中rq的value值进行分组, 这一步的返回结果Map<String,List<Map<String, Object>>>
.entrySet() // 得到Set<Map.Entry<String, List<Map<String, Object>>>
.stream()
.map(m -> { // 进入映射环境
// m.getValue()的结果是 List<Map<String, Object>>
Map<String, Object> collect = m.getValue().stream()
// o.entrySet() 的结果是 Set<Map.Entry<String, Object>>[
.flatMap(o -> o.entrySet().stream()).filter(e -> e.getValue() != null)//过滤下,value需要是不为空的,否则报错
// (m1, m2) -> m1 的意思是如果key相同 m1 == m2 则value使用m1(此处为sourceList中的值)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a1, a2) -> m1
));
return collect;
}).sorted(Comparator.comparing(m -> m.get("rq").toString())).collect(Collectors.toList());