• Java之——利用Comparator接口对多个排序条件进行处理


    转载自:http://blog.csdn.net/l1028386804/article/details/56513205 

    膜拜大神···

    一、需求

        假设现在有个如此的需求:需要对一个这样的雇员列表进行排序,排序规则如下:
        1、首先级别最高的排在前面,
        2、如果级别相等,那么按工资排序,工资高的排在前面,
        3、如果工资相当则按入职年数排序,入职时间最长的排在前面。

    雇员对象包含级别、工资和入职年份,代码如下:

     

    [java] view plain copy
     
    1. package import /** 
    2.  * 雇员信息 
    3.  * @author liuyazhuang 
    4.  * 
    5.  */ publicclassimplements privatestaticfinallong      * ID 
    6.      */ publicint      * 级别 
    7.      */ publicint      * 工资 
    8.      */ publicint      * 入职年数 
    9.      */ publicint publicint return publicvoidint this publicint return publicvoidint this publicint return publicvoidint this publicint return publicvoidint this publicintintintint this this this this }  

     

    二、实现Comparator接口

    这里我们实现Java.util.Comparator接口,用于对雇员列表进行排序,代码如下:

    [java] view plain copy
     
    1. package import import /** 
    2.  * 核心排序类 
    3.  * @author liuyazhuang 
    4.  * 
    5.  */ publicclassimplements   
    6. publicint int;  
    7.   
    8. int if) {  
    9. ) ?  : -;  
    10. else   
    11. if) {  
    12. ) ?  : -;  
    13. else   
    14. if) {  
    15. ) ?  : -;  
    16. return }  

     

    三、验证排序结果

    下面用一个单元测试,来验证排序结果是否正确

    [java] view plain copy
     
    1. package import import import import import import /** 
    2.  * 测试排序类 
    3.  *  
    4.  * @author liuyazhuang 
    5.  * 
    6.  */ publicclass   
    7. publicvoidthrows new new));  
    8. new));  
    9. new));  
    10. new));  
    11. new));  
    12. new));  
    13. new));  
    14. new));  
    15. new));  
    16. new));  
    17. new));  
    18. new );  
    19. );  
    20. for , employee.getId(), employee.getLevel(), employee.getSalary(),  
    21. );  
    22. }  

    运行结果:

     

    四、附录

    java.util.Comparator接口源代码

     

    [java] view plain copy
     
    1. /* 
    2.  *  Licensed to the Apache Software Foundation (ASF) under one or more 
    3.  *  contributor license agreements.  See the NOTICE file distributed with 
    4.  *  this work for additional information regarding copyright ownership. 
    5.  *  The ASF licenses this file to You under the Apache License, Version 2.0 
    6.  *  (the "License"); you may not use this file except in compliance with 
    7.  *  the License.  You may obtain a copy of the License at 
    8.  * 
    9.  *     http://www.apache.org/licenses/LICENSE-2.0 
    10.  * 
    11.  *  Unless required by applicable law or agreed to in writing, software 
    12.  *  distributed under the License is distributed on an "AS IS" BASIS, 
    13.  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    14.  *  See the License for the specific language governing permissions and 
    15.  *  limitations under the License. 
    16.  */ package /** 
    17.  * A {@code Comparator} is used to compare two objects to determine their ordering with 
    18.  * respect to each other. On a given {@code Collection}, a {@code Comparator} can be used to 
    19.  * obtain a sorted {@code Collection} which is <i>totally ordered</i>. For a {@code Comparator} 
    20.  * to be <i>consistent with equals</i>, its {code #compare(Object, Object)} 
    21.  * method has to return zero for each pair of elements (a,b) where a.equals(b) 
    22.  * holds true. It is recommended that a {@code Comparator} implements 
    23.  * {@link java.io.Serializable}. 
    24.  * 
    25.  * @since 1.2 
    26.  */ publicinterface      * Compares the two specified objects to determine their relative ordering. The ordering 
    27.      * implied by the return value of this method for all possible pairs of 
    28.      * {@code (lhs, rhs)} should form an <i>equivalence relation</i>. 
    29.      * This means that 
    30.      * <ul> 
    31.      * <li>{@code compare(a,a)} returns zero for all {@code a}</li> 
    32.      * <li>the sign of {@code compare(a,b)} must be the opposite of the sign of {@code 
    33.      * compare(b,a)} for all pairs of (a,b)</li> 
    34.      * <li>From {@code compare(a,b) > 0} and {@code compare(b,c) > 0} it must 
    35.      * follow {@code compare(a,c) > 0} for all possible combinations of {@code 
    36.      * (a,b,c)}</li> 
    37.      * </ul> 
    38.      * 
    39.      * @param lhs 
    40.      *            an {@code Object}. 
    41.      * @param rhs 
    42.      *            a second {@code Object} to compare with {@code lhs}. 
    43.      * @return an integer < 0 if {@code lhs} is less than {@code rhs}, 0 if they are 
    44.      *         equal, and > 0 if {@code lhs} is greater than {@code rhs}. 
    45.      * @throws ClassCastException 
    46.      *                if objects are not of the correct type. 
    47.      */ publicint      * Compares this {@code Comparator} with the specified {@code Object} and indicates whether they 
    48.      * are equal. In order to be equal, {@code object} must represent the same object 
    49.      * as this instance using a class-specific comparison. 
    50.      * <p> 
    51.      * A {@code Comparator} never needs to override this method, but may choose so for 
    52.      * performance reasons. 
    53.      * 
    54.      * @param object 
    55.      *            the {@code Object} to compare with this comparator. 
    56.      * @return boolean {@code true} if specified {@code Object} is the same as this 
    57.      *         {@code Object}, and {@code false} otherwise. 
    58.      * @see Object#hashCode 
    59.      * @see Object#equals 
    60.      */ publicboolean }  
  • 相关阅读:
    c#基础问题笔记(一)
    自动化技术中的进给电气传动研习笔记2
    自动化技术中的进给电气传动研习笔记1
    汉字在电脑中是如何存储与编码的呢?
    三十分钟掌握STL
    python练习:函数2
    python练习:函数3
    Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form ResumeForm needs updating.
    vue 数组对象取对象的属性: Cannot read property 'xxxx' of undefined
    python练习:函数4
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/10654436.html
Copyright © 2020-2023  润新知