Java 自动生成并排序 List<User> 中的 serial 字段
本文介绍了如何使用 Java 代码自动生成 List<User> 中 User 对象的 serial 字段,并根据 serial 值进行排序。该方法适用于 serial 字段可能存在或不存在的情况,并能保证生成的 serial 值递增且唯一。
可以通过以下方式实现:
-
遍历输入的
List<User>数据,对于每个User对象,判断其serial字段是否有值。如果有值,则将其转换成整型并记录下来,如果没有值,则将其标记为未设置(例如赋值为 -1)。 -
找到最大的已设置的
serial值,如果没有已设置的值,则将其赋值为 0。 -
对于所有未设置的
serial值,从最大的已设置的值 + 1 开始递增。 -
将所有
User对象按照serial值进行排序,如果有相同的serial值,则按照其在输入List中的顺序进行排序。
下面是一个示例代码实现:
public static void autoGenerateSerial(List<User> userList) {
int maxSerial = 0;
// 遍历所有User对象,找出最大的已设置的serial值
for (User user : userList) {
if (user.getSerial() != null) {
int serial = Integer.parseInt(user.getSerial());
if (serial > maxSerial) {
maxSerial = serial;
}
}
}
// 对于所有未设置的serial值,从最大的已设置的值+1开始递增
int nextSerial = maxSerial + 1;
for (User user : userList) {
if (user.getSerial() == null) {
user.setSerial(String.valueOf(nextSerial));
nextSerial++;
}
}
// 将所有User对象按照serial值进行排序
Collections.sort(userList, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
int serial1 = o1.getSerial() == null ? -1 : Integer.parseInt(o1.getSerial());
int serial2 = o2.getSerial() == null ? -1 : Integer.parseInt(o2.getSerial());
if (serial1 == serial2) {
return userList.indexOf(o1) - userList.indexOf(o2);
} else {
return serial1 - serial2;
}
}
});
}
注意:上述代码中假设 serial 字段的值是一个数字字符串,如果实际情况不是数字字符串,需要对比较和转换进行相应的修改。
原文地址: https://www.cveoy.top/t/topic/oEa5 著作权归作者所有。请勿转载和采集!