如何按字母顺序对字符串的ArrayList进行排序?

时间:2015-12-06 09:47:49

标签: java sorting arraylist collections

我试图创建一个可以按字母顺序对ArrayList内容进行排序的程序。现在我的课程中有三节课......

public class Dog {
    private String name;

    public Dog(){

    }

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

    public String getName(){
        return this.name;
    }
}

DogList(包含Dog类型的ArrayList)

import java.util.ArrayList;

public class DogList {

    private ArrayList<Dog> dogList;

    public DogList(){
        DogList = new ArrayList<>();
    }

    public void setSize(int DogSize){
        for(int x = 0; x <= DogSize; x++){
            DogList.add(new Dog());
        }
    }

    public ArrayList<Dog> getList(){
        return dogList;
    }
}

和最后一个类DogSorter,它试图访问DogList ArrayList,然后尝试按字母顺序对该ArrayList的内容进行排序。

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


public class DogSorter {
    private DogList list = new DogList();

    public void sortDogs{
        Collections.sort(list);
    }

    for(i = 0; i < list.length(); i++) {
        System.out.println(list.getList().get(i).getName();
    }
}

我为这篇长篇大论道歉。我的问题很简单:如何准确地对ArrayList的内容进行排序?我一直在收到错误消息,说我试图将错误的类型与我的&#34; Collections.sort&#34;线。如果有人可以提供帮助,请告诉我。谢谢。

编辑:为了清楚起见,我试图按照每个对象的getName()中存储的字符串按字母顺序对它们进行排序

7 个答案:

答案 0 :(得分:6)

请按照这种方式,不要让代码过多,在这里我看到你弄乱了代码并且很难理解。

请按照这种最简单的方式按排序顺序(升序/降序)方式对Dog Object的列表进行排序。

import java.util.ArrayList;
import java.util.Collections;


class Dog implements Comparable<Dog>{
    String name;

    Dog(String name){
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public int compareTo(Dog o) {
        return this.name.compareTo(o.getName()); // dog name sort in ascending order 
        //return o.getName().compareTo(this.name); use this line for dog name sort in descending order 
    }

    @Override
    public String toString() {
        return this.name;
    }
}


public class DogSort {

    public static void main(String[] args) {
        ArrayList<Dog> listDog = new ArrayList<Dog>();
        listDog.add(new Dog("doggy"));
        listDog.add(new Dog("aaa"));
        listDog.add(new Dog("bbb"));
        System.out.println(listDog);
        Collections.sort(listDog);
        System.out.println(listDog);

    }

}

答案 1 :(得分:5)

使用

Collections.sort(dogList, new Comparator<Dog>(){
    public int compare(Dog d1, Dog d2){
         return d1.getName().compareTo(d2.getName());
    }    
});

这将根据比较器比较每只狗。比较者只是比较狗的名字。

更新:适用于惯用的java 8风格

Collections.sort(dogList, (d1,d2) -> d1.getName().compareTo(d2.getName()));

答案 2 :(得分:3)

您可以使用以下方式对其进行排序:

blender -b --python myscript.py

答案 3 :(得分:2)

您需要实现Comparator界面。

答案 4 :(得分:2)

对于您的类和变量,您使用相同的名称DogList。改变它。

例如:

private ArrayList<Dog> innerList;

在DogList类中,声明一个排序方法

public sort() { 
Collections.sort(innerList);
}

你的狗类必须具有可比性

public class Dog implements Comparable {

public int compareTo(Object _other)
{
// DO the comparaison
return 1;
}

}

答案 5 :(得分:2)

您可以使用Comparator来解决此问题。

我希望这能解决您的问题 - How to sort an ArrayList in Java

答案 6 :(得分:1)

在Dog类中实现Comparable接口或编写一个自定义Comparator,它会对Dog的名字进行排序。