排序数组按名称、居民和大小列出国家/地区



我想创建三种方法,我可以用来对ArrayList进行排序,ArrayList按国家名称(字母顺序(,居民数量和国家大小从文本文件中读取国家列表。我知道如何按名称对它们进行排序,但我迷失了如何按居民和大小排序。

这就是文本文件的结构;国家名称,居民,大小和首都。

Belgien     10584534   30528    Bryssel
Bosnien     4590310    51129    Sarajevo    
Cypern      854000     9250     Nicosia
Serbien     7276195    77474    Belgrad

我已经创建了一个读取文件并使用 Collections.sort(( 对其进行排序的方法,但如前所述,我什至不知道如何从其他两个方法开始。

到目前为止我的代码:

public class Land {
    static boolean valid = true;
    public static boolean sortNames() {
        File file = new File("europa.txt");
        ArrayList<String> list = new ArrayList<String>();
        try{
            Scanner scan = new Scanner(file);
            while(scan.hasNextLine()){
                list.add(scan.nextLine());
            }
            scan.close();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();}
        ListIterator iterator = list.listIterator();
        Collections.sort(list);
        System.out.println("Country:       Inhabitants: Size:       Capital: n");
        for (String element : list) {
            System.out.println(element);
        }
        return valid;
    }
    public static void main(String[] args) {
        System.out.print("n" + sortNames());
    }
}

现在打印的代码:

Country:       Inhabitants: Size:       Capital:
Albanien        3581655    28748        Tirana
Belgien         10584534   30528        Bryssel
Bosnien         4590310    51129        Sarajevo

不要只是阅读和存储整个线条,而是将它们拆分到字段中并创建体面的"国家"对象。将这些对象存储在列表中。您可以使用 Collections.sort(list, comparator( 根据国家/地区对象的字段,根据不同的实现对国家/地区进行排序。

public static boolean sortNames() {
    File file = new File("europa.txt");
    ArrayList<Country> list = new ArrayList<Country>();
    try {
        Scanner scan = new Scanner(file);
        while(scan.hasNextLine()){
            String line = scan.nextLine();
            Country country = new Country();
            // Split the line and fill the country object
            list.add(country);
        }
        scan.close();
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    Collections.sort(list, new Comparator<Country>(){
      @Override
      public int compare(Country c1, Country c2) {
        return c1.getName().compareTo(c2.getName());
      }
    });
    // You can create different comparators and sort based on inhabitants, capital, or even a combination of fields...
    System.out.println("Country:       Inhabitants: Size:       Capital: n");
    for (Country element : list) {
        System.out.println(element.getName() + ", " + element.getInhabitants() /*etc*/);
    }
    return valid;
}
public class Country {
  private String name;
  private int inhabitants;
  private int size;
  private String capital;
  // constructor
  // getters and setters
}

对于 Java 8 及更高版本:

您应该拆分行并创建Country带有字段的对象:

nameOfCountry, habitants, size, capital

之后,您可以使用 List.sort() 方法,如下所示:

list.sort(Comparator.comparing(Country::getNameOfCountry)
                        .thenComparing(Country::getHabitants)
                        .thenComparing(Country::getSize));

相关内容

  • 没有找到相关文章

最新更新