Java 将列表List<User>按userName和nickName排序

1、定义实体类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

// 使用lombok简化实体类编写,也可以手动写getter/setter
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String userName;  // 用户名
    private String nickName;  // 昵称
    // 可以添加其他字段,如id、age等
}

2、列表排序

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

public class UserListSortDemo {
    public static void main(String[] args) {
        // 1. 构建测试数据
        List<User> userList = new ArrayList<>();
        userList.add(new User("zhangsan", "张三"));
        userList.add(new User("lisi", "李四"));
        userList.add(new User("zhangsan", "张三2号"));
        userList.add(new User("wangwu", "王五"));
        userList.add(new User("lisi", "李四1号"));

        // 2. 方式1:使用Stream API排序(推荐,不修改原列表)
        List<User> sortedList = userList.stream()
                // 先按userName升序,再按nickName升序
                .sorted(Comparator.comparing(User::getUserName)
                        .thenComparing(User::getNickName))
                .collect(Collectors.toList());

        // 3. 方式2:直接对原列表排序(会修改原列表)
        userList.sort(Comparator.comparing(User::getUserName)
                .thenComparing(User::getNickName));

        // 4. 降序排序(userName降序,nickName降序)
        List<User> descSortedList = userList.stream()
                .sorted(Comparator.comparing(User::getUserName).reversed()
                        .thenComparing(Comparator.comparing(User::getNickName).reversed()))
                .collect(Collectors.toList());

        // 打印排序结果
        System.out.println("升序排序结果:");
        sortedList.forEach(user -> 
            System.out.println("userName: " + user.getUserName() + ", nickName: " + user.getNickName()));
    }
}

 

posted @ 2026-03-03 16:57  都是城市惹的祸  阅读(0)  评论(0)    收藏  举报