Java 排序ArrayList集合。排序不起作用

Java 排序ArrayList集合。排序不起作用,java,arraylist,Java,Arraylist,我可以看到这个话题已经被大量讨论过了,但是,在之前的讨论中,我无法找到我问题的答案。也就是说,我有一个非常简单的问题,我想让用户输入一个城市列表。输入后,我将列表存储在ArrayList cities中,并使用collections.sort对其进行排序。出于某种原因,collections.sort没有对我的ArrayList进行排序。示例:用户输入为“亚特兰大,华盛顿特区,纽约”。运行程序时,我的输出未排序 public class CitySortDemo { public sta

我可以看到这个话题已经被大量讨论过了,但是,在之前的讨论中,我无法找到我问题的答案。也就是说,我有一个非常简单的问题,我想让用户输入一个城市列表。输入后,我将列表存储在ArrayList cities中,并使用collections.sort对其进行排序。出于某种原因,collections.sort没有对我的ArrayList进行排序。示例:用户输入为“亚特兰大,华盛顿特区,纽约”。运行程序时,我的输出未排序

public class CitySortDemo {
    public static void main(String[] args) {
        ArrayList<String> cities = new ArrayList<String>();
        Scanner input = new Scanner(System.in);
        System.out.println("enter as many cities as you can!");
        cities.add(input.nextLine());
        Collections.sort(cities);
        for (int i = 0; i < cities.size(); i++){
            System.out.println(cities.get(i));
        }
    }
}
公共级城市体育演示{
公共静态void main(字符串[]args){
ArrayList cities=新的ArrayList();
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入尽可能多的城市!”);
cities.add(input.nextLine());
收藏。分类(城市);
对于(int i=0;i
您的代码将一个字符串添加到集合中,
“亚特兰大,华盛顿特区,纽约”
。只有一个条目的集合不受排序的影响。:-)

您可能想将该字符串拆分,可能是用逗号将其拆分:

cities.addAll(Arrays.asList(input.nextLine().split("\\s*,\\s*")));


将一个字符串拆分为一个逗号数组,可以选择前面加空格和/或后面加空格,并将它们全部添加到集合中。

您可以询问用户预计有多少个城市需要排序,或者指定一个字符,当看到该字符时,停止输入并对其排序。在您的代码中,它只接受一行作为字符串。例如,在用户输入代码为
的说明符字符之前,它将占用城市然后排序

import java.util.*;

class CitySortDemo {

    public static void main(String[] args) {
        final String specifier = "!";
        String str;
        ArrayList<String> cities = new ArrayList<String>();
        Scanner input = new Scanner(System.in);
        System.out.println("enter as many cities as you can!");
        str = input.nextLine();
        while (! str.equals(specifier)) {
            cities.add(str);
            str = input.nextLine();
        }
        Collections.sort(cities);
        cities.forEach(System.out::println);
    }
import java.util.*;
城市体育示范班{
公共静态void main(字符串[]args){
最终字符串说明符=“!”;
字符串str;
ArrayList cities=新的ArrayList();
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入尽可能多的城市!”);
str=input.nextLine();
而(!str.equals(说明符)){
城市。添加(str);
str=input.nextLine();
}
收藏。分类(城市);
cities.forEach(System.out::println);
}

您只添加了一个城市您只读取了一行输入,并将整行作为列表中的单个元素添加。也许您想拆分输入行。您没有城市列表,只有一个用coma分隔的城市字符串。或者,当然,根本不使用集合,使用
split
中的数组,很好,dem分级
forEach
和方法引用::-),但输入可能已指定为赋值的一部分。