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