• java多字段排序


    java多字段排序

    java8中,可以用Lambda的sorted进行排序。
    有时我们还需要对多个字段进行排序。
    多个字段排序,先对第一个排序字段排序,当第一个排序字段相同时,会使用第二个排序字段进行排序。

    多字段排序的api

    • 多个字段排序的格式
    //第一个排序字段
    Comparator<对象名> comparatorFirst = Comparator.comparing(对象名::方法名1);
    //第二个排序字段,如果需要倒序就可以用reversed,不需要倒序就不用加 reversed
    Comparator<对象名> comparatorSecond = Comparator.comparing(对象名::方法名2).reversed();
    //多个字段排序
    Comparator<对象名> comparator = comparatorFirst.thenComparing(comparatorSecond);
    

    当然,也可以直接连起来写:

    Comparator<对象名> comparator = Comparator.comparing(对象名::方法名1)
    		.thenComparing(Comparator.comparing(对象名::方法名2).reversed());
    

    如果是三个以上的字段排序,就继续用 thenComparing 连接。

    示例

    • 对象类:
    public class Order {
    
        private String weight;
    
        private double price;
    
        private int age ;
    
    	//getter、 setter、构造方法
    }
    
    
    • 多个字段排序:
    public static void orderFields() {
    	Order order1=new Order();
    	order1.setAge(10);order1.setPrice(1.3);
    	Order order2=new Order();
    	order2.setAge(10);order2.setPrice(33.6);
    	Order order3=new Order();
    	order3.setAge(66);order3.setPrice(55.8);
    	Order order4=new Order();
    	order4.setAge(33);order4.setPrice(55.3);
    
    	List<Order> list= new ArrayList<>();
    	list.add(order1);
    	list.add(order2);
    	list.add(order3);
    	list.add(order4);
    
    	//多个字段排序
    	Comparator<Order> comparator = Comparator.comparing(Order::getAge)
    			.thenComparing(Comparator.comparing(Order::getPrice).reversed());
    
    	List<Order> orderList = list.parallelStream()
    			.filter(Objects::nonNull)
    			.sorted(comparator)
    			.collect(Collectors.toList());
    
    	orderList.forEach(o -> System.out.println("age:"+ o.getAge()+",price:"+o.getPrice()));
    	
    }
    
    

    输出结果如下,可以看到:
    多个字段排序,先按age升序,age相同的,就按price降序。

    age:10,price:33.6
    age:10,price:1.3
    age:33,price:55.3
    age:66,price:55.8
    

    参考资料:

    https://www.cnblogs.com/expiator/p/14751838.html

  • 相关阅读:
    Servlet总结06——servlet过滤器
    jdbc 事务及事务隔离
    集群中几种session同步解决方案的比较[转]
    Servlet总结05——servlet监听器
    Servlet总结(系列文章)
    Eclipse导入Tomcat源码
    Servlet总结02——请求转发
    Servlet总结01——servlet的主要接口、类
    [ lucene其他 ] 几种常见的基于Lucene的开源搜索解决方案对比[转]
    Servlet总结04——注意Servlet单实例的线程安全性
  • 原文地址:https://www.cnblogs.com/expiator/p/15429841.html
Copyright © 2020-2023  润新知