我想创建三种方法,可用于对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
答案 0 :(得分:3)
不仅要整体读取和存储行,还要在字段中将它们拆分并创建体面的“ Country”对象。将这些对象存储在列表中。您可以使用Collections.sort(列表,比较器)根据国家对象的字段,根据不同的实现对国家进行排序。
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
}
答案 1 :(得分:3)
对于Java 8及更高版本:
您应将行拆分并使用字段创建Country
对象:
nameOfCountry, habitants, size, capital
此后,您可以按以下方式使用List.sort()
方法:
list.sort(Comparator.comparing(Country::getNameOfCountry)
.thenComparing(Country::getHabitants)
.thenComparing(Country::getSize));