使用java8 lambda表达式进行优雅排序

2023-11-02 18:33:31 浏览数 (2)

使用Java 8的Lambda表达式对List中的对象进行排序是一项强大的功能,特别是在处理自定义对象时。在这篇文章中,我们将详细讲解如何对包含User对象的List按照createTime字段进行排序,同时考虑到createTime为空的情况,确保它们排在最后。

准备工作

首先,我们需要创建一个User类,包括idusernamecreateTime字段。User类如下所示:

代码语言:javascript复制
package com.xiaozhuge.springbootldap.demo;

import java.time.LocalDateTime;


public class User {
    private int id;
    private String username;
    private LocalDateTime createTime;

    public User(int id, String username, LocalDateTime createTime) {
        this.id = id;
        this.username = username;
        this.createTime = createTime;
    }

    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;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }
}

在这个示例中,我们使用LocalDateTime来表示用户的createTime字段。

使用Lambda表达式排序

我们将使用Java 8的List接口中的sort方法来对User对象的List进行排序。我们还将使用Lambda表达式来定义排序规则,确保将createTime为空的User对象排在最后。

以下是对List<User>的排序示例:

代码语言:javascript复制
package com.xiaozhuge.springbootldap.demo;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class UserSortingExample {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        users.add(new User(1, "Alice", LocalDateTime.of(2023, 3, 15, 10, 30)));
        users.add(new User(2, "Bob", null));
        users.add(new User(3, "Charlie", LocalDateTime.of(2023, 3, 14, 15, 45)));
        users.add(new User(4, "David", LocalDateTime.of(2023, 3, 16, 8, 0)));
        users.add(new User(5, "Eve", null));

        // 使用Lambda表达式对List<User>进行正序排序排序
        users.sort(Comparator.comparing(User::getCreateTime, Comparator.nullsLast(LocalDateTime::compareTo)));
        // 使用Lambda表达式对List<User>进行倒序排序排序
        users.sort(Comparator.comparing(User::getCreateTime, Comparator.nullsLast(Comparator.reverseOrder())));

        // 输出排序后的用户列表
        for (User user : users) {
            System.out.println(user.getUsername()   " - "   user.getCreateTime());
        }
    }
}

在这个示例中,我们首先创建一个包含User对象的List,其中包括具有不同createTime值的用户,包括null值。然后,我们使用sort方法并传递一个Lambda表达式作为参数来定义排序规则。

Lambda表达式中的排序规则首先检查createTime是否为null,然后根据不同情况返回不同的值。这确保了createTime为空的User对象排在最后。如果两个User对象都具有非空的createTime,则使用compareTo方法进行比较,以进行升序排序。

结论

使用Java 8的Lambda表达式对包含自定义对象的List进行排序是一项非常强大和灵活的功能。通过定义自定义排序规则,我们可以满足不同的需求,并确保排序的准确性。在这篇文章中,我们展示了如何对包含User对象的List按照createTime字段进行排序,同时考虑到createTime为空的情况,确保它们排在最后。这个功能在许多实际应用中都非常有用,特别是在处理数据库查询结果或其他数据集合时。

0 人点赞