我想创建三种方法,我可以用来对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));