Java对List对象排序

这里介绍了java8之前和java8之后的对List对象排序的方法。

先定义一个简单的javabean:

class User {
    private int id;
    private String username;

    /**
     * @param id
     * @param username
     */
    public User(int id, String username) {
        this.id = id;
        this.username = username;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + "]";
    }
}

排序:(注意本来排序是要一个个进行测试的,但是这里为了方便就放在一起)

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author yansheng
 * @date 2019/10/11
 */
public class TestSortList {

    public static void main(String[] args) {

        User user1 = new User(1, "1111");
        User user2 = new User(2, "2222");
        User user3 = new User(3, "3333");
        User user4 = new User(4, "4444");

        List<User> users = new ArrayList<User>();
        users.add(user4);
        users.add(user1);
        users.add(user3);
        users.add(user2);

        System.out.println("排序前:");
        // jdk1.5:foreach遍历
        for (User user : users) {
            System.out.println(user.toString());
        }

        // 方法1.(java之前)用集合工具类Collections进行排序
        Collections.sort(users, new Comparator<User>() {

            @Override
            public int compare(User o1, User o2) {

                int id1 = o1.getId();
                int id2 = o2.getId();

                // 第一个数比较小,返回负数
                if (id1 < id2) {
                    return -1;
                } else {
                    return 1;
                }
            }

        });
        
        System.out.println("排序后:");
        // jdk1.8:forEach + Lambda表达式遍历
        users.forEach((User user) -> System.out.println(user.toString()));

        // 方法2.1(java8)用lambda排序
        users.sort((User o1, User o2) -> o1.getId() < o2.getId() ? -1 : 1);
        System.out.println("排序后:");
        users.forEach((User user) -> System.out.println(user.toString()));

        // 方法2.2(java8)用lambda+ “jdk8新特性之双冒号 :: ”排序
        users.sort(Comparator.comparingInt(User::getId));

        System.out.println("排序后:");
        users.forEach((User user) -> System.out.println(user.toString()));
    }
}

输出:

排序前:
User [id=4, username=4444]
User [id=1, username=1111]
User [id=3, username=3333]
User [id=2, username=2222]
排序后:
User [id=1, username=1111]
User [id=2, username=2222]
User [id=3, username=3333]
User [id=4, username=4444]
排序后:
User [id=1, username=1111]
User [id=2, username=2222]
User [id=3, username=3333]
User [id=4, username=4444]
排序后:
User [id=1, username=1111]
User [id=2, username=2222]
User [id=3, username=3333]
User [id=4, username=4444]

注: 如果这里id是String 类型,在比较是可以转为Integer,然后进行比较。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值