需求
有几千万数据订单,需要查出来,并且根据用户去重并且,筛选出10大消费客户,想到之前归并排序,这里参考了归并排序的思想,每批排出10个最大客户,最终将这些10个一批的用户继续排序。
关键代码如下
这里是一批的的数据排序方式
List<User> users = new ArrayList<>();
users.add(new User("1",new BigDecimal("10.00")));
users.add(new User("1",new BigDecimal("10.00")));
users.add(new User("1",new BigDecimal("10.00")));
users.add(new User("2",new BigDecimal("2.00")));
users.add(new User("3",new BigDecimal("3.00")));
users.add(new User("4",new BigDecimal("4.00")));
users.add(new User("5",new BigDecimal("5.00")));
users.add(new User("6",new BigDecimal("6.00")));
List<User> sortedUsers = users.stream()
.collect(Collectors.toMap(User::getUserId, a -> a, (o1, o2) -> {
o1.setAmount(o1.getAmount().add(o2.getAmount()));
return o1;
})).values().stream().sorted(Comparator.comparing(User::getAmount).reversed()).limit(10).collect(Collectors.toList());