Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 对beanshell脚本生成的文件进行多重排序_Sorting_Beanshell - Fatal编程技术网

Sorting 对beanshell脚本生成的文件进行多重排序

Sorting 对beanshell脚本生成的文件进行多重排序,sorting,beanshell,Sorting,Beanshell,我正在从beanshell脚本生成.txt文件。现在我在分类方面遇到了问题。如果有人能给出任何想法,那将是很大的帮助。该文件看起来像: UserId FirstName LastName Status roleId 2025 A B Active 3 2021 C D InActive 2 2036 E F Active 1 3012 G

我正在从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
排序应该在按状态升序写入文件时完成,然后按roleId升序,然后按UserId升序。


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.sortlist,comparator,其中comparator是一个自定义的比较器,它通过定义一个项目比另一个项目大或小的原因来控制项目的排序方式。有关更多信息,请参阅。
Collections.sort(list, comparator);
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();
        }
    }
}