ReadTxt.java:
package test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Java讀取TXT文件內容-轉成實體-並使用JDK8的排序輸出 * * * @since: v1.0 */ public class ReadTxt { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { List<User> list = initList(); // jdk8之前的排序 Collections.sort(list, new Comparator<User>() { @Override public int compare(User o1, User o2) { return String.valueOf(o1.getAge()).compareTo(String.valueOf(o2.getAge())); } }); // jdk8 lambda排序,帶參數類型 list = initList(); list.sort((User u1, User u2) -> String.valueOf(u1.getAge()).compareTo(String.valueOf(u2.getAge()))); list.forEach(System.out::println); System.out.println(); // jdk8 lambda排序,不帶參數類型 list = initList(); list.sort((u1, u2) -> String.valueOf(u1.getAge()).compareTo(String.valueOf(u2.getAge()))); list.forEach(System.out::println); System.out.println(); // jdk8 升序排序,Comparator提供的靜態方法 list = initList(); Collections.sort(list, Comparator.comparing(User::getAge)); list.forEach(System.out::println); System.out.println(); // jdk8 降序排序,Comparator提供的靜態方法 list = initList(); Collections.sort(list, Comparator.comparing(User::getAge).reversed()); list.forEach(System.out::println); System.out.println(); // jdk8 組合排序,Comparator提供的靜態方法,先按年紀排序,年紀相同的按名稱排序 list = initList(); Collections.sort(list, Comparator.comparing(User::getAge).thenComparing(User::getName)); list.forEach(System.out::println); } /** * 讀入TXT文件 * * @return * @throws IOException */ private static List<User> initList() throws IOException { List<User> list = new ArrayList<>(); String pathname = "E:\\macroviewPro\\IPT_AmwayTest\\src\\test\\resources\\User.txt"; // 絕對路徑或相對路徑都可以,這里是絕對路徑,寫入文件時演示相對路徑 File filename = new File(pathname); // 要讀取以上路徑的input。txt文件 InputStreamReader reader = new InputStreamReader(new FileInputStream(filename)); // 建立一個輸入流對象reader BufferedReader br = new BufferedReader(reader); // 建立一個對象,它把文件內容轉成計算機能讀懂的語言 String line = ""; // 每一行的內容 int i = 1; while ((line = br.readLine()) != null) { String[] split = line.trim().split("\\s+");// .trim()可以去掉首尾多余的空格 // .split("\\s+")表示用正則表達式去匹配切割,\\s+表示匹配一個或者以上的空白符 if (i > 1) { // 第一行不要 list.add(new User(split[0], Integer.valueOf(split[1]))); // 添加一個User實體 } i++; } reader.close(); br.close(); return list; } }
User.java:
package test; /** * * * * @since: v1.0 */ public class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } }