我的比较器不起作用,它没有对任何内容进行排序[关闭]

问题描述 投票:-6回答:1

我有一个ArrayList和一个使用过的比较器进行排序,但是当我运行此程序时,该数组未更改(未排序)enter image description hereenter image description here

java comparator
1个回答
0
投票

尝试以下代码。它为我工作:

class Test {
    public static void main(String[] args) {
        Comparator<Country> byId = new Comparator<Country>() {
            @Override
            public int compare(Country o1, Country o2) {
                return o1.getId().compareTo(o2.getId());
            }
        };

        Comparator<Country> byName = new Comparator<Country>() {
            @Override
            public int compare(Country o1, Country o2) {
                return o1.getName().compareTo(o2.getName());
            }
        };

        Comparator<Country> byArea = new Comparator<Country>() {
            @Override
            public int compare(Country o1, Country o2) {
                return o1.getArea().compareTo(o2.getArea());
            }
        };
        ArrayList<Country> countries = new ArrayList<>();
        Country country = new Country(2, "name2", "area2");
        countries.add(country);
        country = new Country(1, "name1", "area1");
        countries.add(country);
        country = new Country(3, "name3", "area3");
        countries.add(country);

        Collections.sort(countries,byId);
        System.out.println("By id - " + countries.toString());

        Collections.sort(countries,byName);
        System.out.println("By name - " + countries.toString());

        Collections.sort(countries,byArea);
        System.out.println("By area - " + countries.toString());
    }

}

class Country {
    private Integer id;
    private String name;
    private String area;

    public Country(Integer id, String name, String area) {
        this.id = id;
        this.name = name;
        this.area = area;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getArea() {
        return area;
    }

    public void setArea(String area) {
        this.area = area;
    }

    @Override
    public String toString() {
        return "Country{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", area='" + area + '\'' +
                '}';
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.