使用java8進行集合數據排序,比較,topn

首先有一個實體類

@Data
@TableName("user")
public class UserInfo extends Model<UserInfo> {
    /**
     * 主鍵Id
     */

    private int id;
    /**
     * 名稱
     */
    private String name;

    /**
     * 年齡
     */
    private int age;
}

然後新建一個main方法測試,根據age倒敘排列,如果age相等則根據name排序
使用關鍵詞sort,comparing,thenComparing

public class TestSort {
    public static void main(String[] args) {
        List<UserInfo> list = new ArrayList<>();
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        userInfo.setAge(34);
        userInfo.setName("yiyi");
        UserInfo userInfo1 = new UserInfo();
        userInfo1.setId(2);
        userInfo1.setAge(3);
        userInfo1.setName("erer");
        UserInfo userInfo2 = new UserInfo();
        userInfo2.setAge(14);
        userInfo2.setName("san");
        UserInfo userInfo3 = new UserInfo();
        userInfo3.setId(3);
        userInfo3.setAge(14);
        userInfo3.setName("wuw");
        list.add(userInfo);
        list.add(userInfo1);
        list.add(userInfo2);
        list.add(userInfo3);

        //根據age從大到小排列,如果有相同的age,則按照姓名倒敘排列
        List<UserInfo> sortList = list.stream().sorted(
                Comparator.comparing(UserInfo::getAge).thenComparing(UserInfo::getName).reversed()
        ).collect(Collectors.toList());
        System.out.println("原來的集合:  "+list);

        System.out.println("倒敘排列:  " + sortList);
    }
}

得到的結果如下

原來的集合:  [UserInfo(id=1, name=yiyi, age=34), UserInfo(id=2, name=erer, age=3), UserInfo(id=0, name=san, age=14), UserInfo(id=3, name=wuw, age=14)]
倒敘排列:  [UserInfo(id=1, name=yiyi, age=34), UserInfo(id=3, name=wuw, age=14), UserInfo(id=0, name=san, age=14), UserInfo(id=2, name=erer, age=3)]

最後獲取年紀最大的人的信息,使用limit關鍵字

  List<UserInfo> collect = sortList.stream().limit(1).collect(Collectors.toList());
        System.out.println("年紀最大的人"+collect);

得到結果

年紀最大的人[UserInfo(id=1, name=yiyi, age=34)]

至此,介紹完畢,還是蠻好用的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章