Comparator(CollectionsArraysSort)

Overview:

Some scenes data structure needs to be sorted, java sort method provides, via a custom Comparator, specify the sort, the following is an example of realization and

use

Example 1

: Comparator compares the object properties list


package JavaContainer.comparator;

//https://www.cnblogs.com/rossoneri/p/4549529.html


import org.junit.Test;

import java.util.*;

//根据姓名排序
class ComparatorName implements Comparator<PersonComparaBean>{

    boolean is_Ascend;

    public ComparatorName(boolean b) {
        // TODO Auto-generated constructor stub
        is_Ascend = b;
    }

    @Override
    public int compare(PersonComparaBean o1, PersonComparaBean o2) {
    
    //o1  o2 分别对应容器中前一个对象和后一个对象
        if (is_Ascend)
            return o1.getName().compareTo(o2.getName());
        else
            return o2.getName().compareTo(o1.getName());
    }
}

//根据id排序

class ComparatorId implements Comparator<PersonComparaBean>{

    private boolean aescOrDesc;

    public ComparatorId(boolean aescOrDesc) {
        this.aescOrDesc = aescOrDesc;
    }

    @Override
    public int compare(PersonComparaBean o1 , PersonComparaBean o2) {

        int a, b;
        if (aescOrDesc) {
            a = o1.getId();
            b = o2.getId();
        } else {
            a = o2.getId();
            b = o1.getId();
        }

        if (a > b)
            return 1;
        else if (a == b)
            return 0;
        else
            return -1;
    }
}

public class ComparatorDemo1 {


    @Test
    public void sortByNameOrId(){
        PersonComparaBean personComparaBean1 = new PersonComparaBean();
        personComparaBean1.setId(1);
        personComparaBean1.setName("ZZZZ");
        PersonComparaBean personComparaBean2 = new PersonComparaBean();
        personComparaBean2.setId(5);
        personComparaBean2.setName("CCCC");
        PersonComparaBean personComparaBean4 = new PersonComparaBean();
        personComparaBean4.setId(2);
        personComparaBean4.setName("DDDD");
        PersonComparaBean personComparaBean3 = new PersonComparaBean();
        personComparaBean3.setId(8);
        personComparaBean3.setName("AAAA");

        List<PersonComparaBean> list = new ArrayList<>();
        list.add(personComparaBean1);
        list.add(personComparaBean2);
        list.add(personComparaBean3);
        list.add(personComparaBean4);


        for (PersonComparaBean personComparaBean : list){
            System.out.println("原: "+personComparaBean);
        }

        /*  原: PersonComparaBean{id='1', name='ZZZZ'}
            原: PersonComparaBean{id='5', name='CCCC'}
            原: PersonComparaBean{id='8', name='AAAA'}
            原: PersonComparaBean{id='2', name='DDDD'}*/


        Collections.sort(list,new ComparatorId(true));

        for (PersonComparaBean personComparaBean : list){
            System.out.println("id: "+personComparaBean);
        }

        /*id: PersonComparaBean{id='1', name='ZZZZ'}
        id: PersonComparaBean{id='2', name='DDDD'}
        id: PersonComparaBean{id='5', name='CCCC'}
        id: PersonComparaBean{id='8', name='AAAA'}*/


        Collections.sort(list,new ComparatorName(true));
        for (PersonComparaBean personComparaBean : list){
            System.out.println("name: "+personComparaBean);
        }

        /*name: PersonComparaBean{id='8', name='AAAA'}
        name: PersonComparaBean{id='5', name='CCCC'}
        name: PersonComparaBean{id='2', name='DDDD'}
        name: PersonComparaBean{id='1', name='ZZZZ'}*/

    }


}

Example 2

: Comparing the bit array comparator

package JavaContainer.comparator;

import org.junit.Test;

import java.util.Arrays;
import java.util.Comparator;

//二维数组第二位比较(如果想要先判断第一位,然后第二位,可以在比较器中再加判断条件对比)
public class ComparatorDemo2 {

    @Test
    public void test() {

        int[][] nums = {{1, 2}, {2, 3}, {1, 1}};

        for (int[] num : nums) {
            for (int num1 : num) {
                System.out.print(num1);
            }
            System.out.println("  ");
        }

        Arrays.sort(nums, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[1] - o2[1];
            }
        });

        for (int[] num : nums) {
            for (int num1 : num) {
                System.out.print(num1);
            }
            System.out.println("  ");
        }

        /*12
            23
            11
            11
            12
            23 */

    }
}

Guess you like

Origin www.cnblogs.com/yaoxublog/p/10930402.html