java--对象比较器

  •       在实际的项目中,经常会遇到排序问题,对于基本数据类型java支持Arrays.sort()和Collection.sort()对集合进行排序,但是对用户自定义类型排序呢?java给我们提供了两种解决方案。

一:通过实现Comparable<Object> 在内部实现

示例代码:

package com.lky.model;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Student implements Serializable, Comparable<Student> {

    private String name;
    private Integer id;
    private String log;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLog() {
        return log;
    }

    public void setLog(String log) {
        this.log = log;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", id=" + id + ", log=" + log + "]";
    }

    @Override
    public int compareTo(Student o) {
        return o.getId()-id;
    }

}

二.通过实现 Comparator<Object> 来定义排序规则

示例代码:

package com.lky.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random;

import org.junit.Test;

import com.lky.model.Student;

public class compartorTest {

    public class OutComparator implements Comparator<Student> {

        @Override
        public int compare(Student o1, Student o2) {
            int result = 0;
            result = o1.getId() - o2.getId();

            if (result == 0) {
                return o1.getName().compareTo(o2.getName());
            } else {
                return result;
            }
        }
    }

    @Test
    public void test() {
        List<Student> array = new ArrayList<Student>();
        for (int i = 0; i < 20; ++i) {
            Student student = new Student();
            student.setId(new Random().nextInt(10) + 1);
            student.setLog("log" + i);
            student.setName("lky" + i);
            array.add(student);
        }
        Collections.sort(array);// 采用默认排序
        // Collections.sort(array, new OutComparator());//采用自定义排序
        for (Student student : array) {
            System.out.println(student);
        }
    }

}
原文地址:https://www.cnblogs.com/dmir/p/4915759.html