Java讀取TXT文件內容-轉成實體-並使用JDK8的排序輸出


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 + "]";
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM