我试图创建一个可以按字母顺序对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()中存储的字符串按字母顺序对它们进行排序
答案 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的名字进行排序。