List使用Stream按一个字段排序、分页、多级排序

本文介绍了在实际应用中如何使用Java8的Stream API对包含Map的List进行排序、分页操作。特别强调了在排序时需注意Map中的数字字符串需转换为数值类型以确保正确排序,同时处理了Comparator可能出现的空指针异常,通过filter排除null元素。还展示了如何实现多级排序和利用stream进行切片分页的方法。
摘要由CSDN通过智能技术生成

实际应用场景是接的实时数据,数据量大概有3600条,返回给客户端还需要进行排序、分页

  • 注意点:
  1. 对于map中的排序key对应的value如果是字符串类型的数字,需要转换成数字类型(如BigDecimal、Integer)再排序,对于字符串类型的数字,是达不到对数字排序的效果的(按照字符串的首个数字排序)
  2. Comparator.comparing(value),value不能为null,会报空指针异常,这里的处理是使用stream将null的map排出后再排序,将null的接到返回的List的后面
  3. 排序使用了java8 stream中的filter、sorted、切片分页方法
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;

public class SortUtil {
    private final static String SORT_TYPE = "desc";

    public static List<Map<String, Object>> sortStock(String keyWord,String sortType,
                                                      List<Map<String, Object>> stockList){
        List<Map<String, Object>> collect = new ArrayList<>();
        List<Map<String, Object>> subList1;
        List<Map<String, Object>> subList2;
        switch (keyWord){
            case "name":
                if (SORT_TYPE.equals(sortType)){
                    collect = stockList.stream()
                        .sorted(Comparator.comparing(SortUtil::getName).reversed())
                        .collect(Collectors.toList());
                }else {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值