我正在从beanshell脚本生成.txt文件。现在我在排序时遇到问题。如果有人可以提出任何想法,那将是很大的帮助。该文件如下所示:
UserId FirstName LastName Status roleId
2025 A B Active 3
2021 C D InActive 2
2036 E F Active 1
3012 G H Active 2
5012 I J InActive 1
排序时,应以Status
升序,然后以roleId
升序,再以UserId
升序写文件。
答案 0 :(得分:0)
假设
public class User {
private Integer userId;
private String firstName, lastName;
public enum Status{
ACTIVE, INACTIVE;
}
private Status status;
private Integer roleId;
// getter and setter
}
您可以使用类似的比较器:
public class UserComparator implements Comparator<User> {
@Override
public int compare(User o1, User o2) {
@Override
public int compare(User o1, User o2) {
int bystatus = o1.getStatus().compareTo(o2.getStatus());
if (bystatus != 0) {
return bystatus;
}
int byid = o1.getUserId().compareTo(o2.getUserId());
if (byid != 0) {
return byid;
}
return o1.getRoleId().compareTo(o2.getRoleId());
}
}
最后:
Collections.sort(list, comparator);
答案 1 :(得分:0)
处理这种类型需求的最好方法是使用要写入文件的字段定义一个类。下一步是将所有所需的记录添加到列表中,然后根据需要对记录进行排序。最后,迭代列表并将记录从列表写入文件。下面给出的是示例代码:
包含所有必填字段的课程:
class Member {
int userId;
String firstName, lastName, status;
int roleId;
public Member(int userId, String firstName, String lastName, String status, int roleId) {
this.firstName = firstName;
this.lastName = lastName;
this.status = status;
this.userId = userId;
this.roleId = roleId;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
}
文件编写器类:
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class MemberWriter {
public static void main(String[] args) {
FileWriter writer;
try {
writer = new FileWriter(new File("members.txt"));
List<Member> list = new ArrayList<Member>();
list.add(new Member(2025, "A", "B", "Active", 3));
list.add(new Member(2021, "C", "D", "InActive", 2));
list.add(new Member(2036, "E", "F", "Active", 1));
list.add(new Member(3012, "G", "H", "Active", 2));
list.add(new Member(5012, "I", "J", "InActive", 1));
Comparator<Member> comparator = Comparator.comparing(Member::getStatus).thenComparing(Member::getRoleId)
.thenComparing(Member::getUserId);
Collections.sort(list, comparator);
writer.write("UserId\tFirstName\tLastName\tStatus\tRoleId\n");
for (Member member : list) {
writer.write(member.getUserId() + "\t" + member.getFirstName() + "\t" + member.getLastName() + "\t"
+ member.getStatus() + "\t" + member.getRoleId() + "\n");
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
如有任何疑问,请随时发表评论。