如何在java中对arraylist排序

如何在java中对arraylist排序,java,collections,Java,Collections,基本上可以通过以下方式进行排序: 集合。排序(列表) 但我的情况有点不同。我有一个包含以下对象的列表 示例代码1: public class GetTraders { private String getTraderLegalName; private String businessName; private Object status; public GetTraders(String getTraderLegalName, String businessNa

基本上可以通过以下方式进行排序:

集合。排序(列表)

但我的情况有点不同。我有一个包含以下对象的列表

示例代码1:

public class GetTraders {
    private String getTraderLegalName;
    private String businessName;
    private Object status;

    public GetTraders(String getTraderLegalName, String businessName, String status) {
        this.getTraderLegalName=getTraderLegalName;
        this.businessName=businessName;
        this.status=status;
    }
我有一个类,该类将给出上述列表的值,如下所示:

public Class getResult {
    List<GetTraders> traders=new ArrayList<GetTraders>();
    public void valueGivenByuser(String legal,String business,Object status)throws Exception {
        GetTraders trade=new GetTraders(legal,business,status);
        traders.add(trade); //Adding value to arrayList
    }
}
public类getResult{
列表交易者=新的ArrayList();
public void valueGivenByuser(字符串合法、字符串业务、对象状态)引发异常{
GetTraders trade=新的GetTraders(法律、业务、状态);
traders.add(trade);//为arrayList添加值
}
}
这里的问题是,一旦我在traders arraylist中添加了所有值,我需要排序并显示为输出。我尝试使用collections.sort(),但它显示编译器异常。

用于确定顺序

Collections.sort(someList, comparator);
用于确定顺序

Collections.sort(someList, comparator);

如果仔细观察,您会发现您有两种选择:

1) 让您的GetTraders类实现可比较的接口和调用

public static <T extends Comparable<? super T>> void sort(List<T> list)
但是,如果您在使用Comparable和Comparator接口时遇到问题,我建议您在进入功能接口的神奇世界之前,先尝试Java-8之前的解决方案


为了完整起见,请在下面找到每个解决方案的示例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class GetTraders1 implements Comparable<GetTraders1> {

    private String getTraderLegalName;
    private String businessName;
    private Object status;

    public GetTraders1(String getTraderLegalName, String businessName, String status) {
        this.getTraderLegalName=getTraderLegalName;
        this.businessName=businessName;
        this.status=status;
    }

    @Override
    public int compareTo(GetTraders1 that) {
        return this.getTraderLegalName.compareTo(that.getTraderLegalName);
    }

    @Override
    public String toString() {
        return "GetTraders [getTraderLegalName=" + getTraderLegalName + ", businessName=" + businessName + ", status=" + status + "]";
    }

    public static void main(String[] args) {

        GetTraders1 getTraders1 = new GetTraders1("1", "bn", "status");
        GetTraders1 getTraders2 = new GetTraders1("2", "bn", "status");
        GetTraders1 getTraders3 = new GetTraders1("3", "bn", "status");

        List<GetTraders1> list = new ArrayList<>();
        list.add(getTraders3);
        list.add(getTraders2);
        list.add(getTraders1);

        System.out.println(list);

        Collections.sort(list);

        System.out.println(list);

    }

}
1) 基于可比性的解决方案:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class GetTraders1 implements Comparable<GetTraders1> {

    private String getTraderLegalName;
    private String businessName;
    private Object status;

    public GetTraders1(String getTraderLegalName, String businessName, String status) {
        this.getTraderLegalName=getTraderLegalName;
        this.businessName=businessName;
        this.status=status;
    }

    @Override
    public int compareTo(GetTraders1 that) {
        return this.getTraderLegalName.compareTo(that.getTraderLegalName);
    }

    @Override
    public String toString() {
        return "GetTraders [getTraderLegalName=" + getTraderLegalName + ", businessName=" + businessName + ", status=" + status + "]";
    }

    public static void main(String[] args) {

        GetTraders1 getTraders1 = new GetTraders1("1", "bn", "status");
        GetTraders1 getTraders2 = new GetTraders1("2", "bn", "status");
        GetTraders1 getTraders3 = new GetTraders1("3", "bn", "status");

        List<GetTraders1> list = new ArrayList<>();
        list.add(getTraders3);
        list.add(getTraders2);
        list.add(getTraders1);

        System.out.println(list);

        Collections.sort(list);

        System.out.println(list);

    }

}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
公共类GetTraders1实现了可比较的{
私有字符串getTraderLegalName;
私有字符串商业名称;
私有对象状态;
public GetTraders1(字符串getTraderLegalName、字符串businessName、字符串status){
this.getTraderLegalName=getTraderLegalName;
this.businessName=businessName;
这个状态=状态;
}
@凌驾
公共int比较(GetTraders1){
返回this.getTraderLegalName.compareTo(that.getTraderLegalName);
}
@凌驾
公共字符串toString(){
返回“GetTraders[getTraderLegalName=“+getTraderLegalName+”,businessName=“+businessName+”,status=“+status+””;
}
公共静态void main(字符串[]args){
GetTraders1 GetTraders1=新的GetTraders1(“1”、“bn”、“status”);
GetTraders1 getTraders2=新的GetTraders1(“2”,“bn”,“status”);
GetTraders1 getTraders3=新的GetTraders1(“3”,“bn”,“status”);
列表=新的ArrayList();
list.add(getTraders3);
list.add(getTraders2);
list.add(getTraders1);
系统输出打印项次(列表);
集合。排序(列表);
系统输出打印项次(列表);
}
}
2) 基于比较器的解决方案

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class GetTraders2 {

    private String getTraderLegalName;
    private String businessName;
    private Object status;

    public GetTraders2(String getTraderLegalName, String businessName, String status) {
        this.getTraderLegalName=getTraderLegalName;
        this.businessName=businessName;
        this.status=status;
    }

    @Override
    public String toString() {
        return "GetTraders [getTraderLegalName=" + getTraderLegalName + ", businessName=" + businessName + ", status=" + status + "]";
    }

    public static void main(String[] args) {

        GetTraders2 getTraders1 = new GetTraders2("1", "bn", "status");
        GetTraders2 getTraders2 = new GetTraders2("2", "bn", "status");
        GetTraders2 getTraders3 = new GetTraders2("3", "bn", "status");

        List<GetTraders2> list = new ArrayList<>();
        list.add(getTraders3);
        list.add(getTraders2);
        list.add(getTraders1);

        System.out.println(list);

        Collections.sort(list, new Comparator<GetTraders2>() {

            @Override
            public int compare(GetTraders2 o1, GetTraders2 o2) {
                return o1.getTraderLegalName.compareTo(o2.getTraderLegalName);
            }

        });

        System.out.println(list);

    }

}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公共类GetTraders2{
私有字符串getTraderLegalName;
私有字符串商业名称;
私有对象状态;
public GetTraders2(字符串getTraderLegalName、字符串businessName、字符串status){
this.getTraderLegalName=getTraderLegalName;
this.businessName=businessName;
这个状态=状态;
}
@凌驾
公共字符串toString(){
返回“GetTraders[getTraderLegalName=“+getTraderLegalName+”,businessName=“+businessName+”,status=“+status+””;
}
公共静态void main(字符串[]args){
GetTraders2 getTraders1=新的GetTraders2(“1”、“bn”、“status”);
GetTraders2 GetTraders2=新的GetTraders2(“2”,“bn”,“status”);
GetTraders2 getTraders3=新的GetTraders2(“3”,“bn”,“status”);
列表=新的ArrayList();
list.add(getTraders3);
list.add(getTraders2);
list.add(getTraders1);
系统输出打印项次(列表);
Collections.sort(list,newcomparator(){
@凌驾
公共整数比较(GetTraders2 o1,GetTraders2 o2){
返回o1.getTraderLegalName.compareTo(o2.getTraderLegalName);
}
});
系统输出打印项次(列表);
}
}

如果仔细观察,您会发现您有两个选择:

1) 让您的GetTraders类实现可比较的接口和调用

public static <T extends Comparable<? super T>> void sort(List<T> list)
但是,如果您在使用Comparable和Comparator接口时遇到问题,我建议您在进入功能接口的神奇世界之前,先尝试Java-8之前的解决方案


为了完整起见,请在下面找到每个解决方案的示例:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class GetTraders1 implements Comparable<GetTraders1> {

    private String getTraderLegalName;
    private String businessName;
    private Object status;

    public GetTraders1(String getTraderLegalName, String businessName, String status) {
        this.getTraderLegalName=getTraderLegalName;
        this.businessName=businessName;
        this.status=status;
    }

    @Override
    public int compareTo(GetTraders1 that) {
        return this.getTraderLegalName.compareTo(that.getTraderLegalName);
    }

    @Override
    public String toString() {
        return "GetTraders [getTraderLegalName=" + getTraderLegalName + ", businessName=" + businessName + ", status=" + status + "]";
    }

    public static void main(String[] args) {

        GetTraders1 getTraders1 = new GetTraders1("1", "bn", "status");
        GetTraders1 getTraders2 = new GetTraders1("2", "bn", "status");
        GetTraders1 getTraders3 = new GetTraders1("3", "bn", "status");

        List<GetTraders1> list = new ArrayList<>();
        list.add(getTraders3);
        list.add(getTraders2);
        list.add(getTraders1);

        System.out.println(list);

        Collections.sort(list);

        System.out.println(list);

    }

}
1) 基于可比性的解决方案:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class GetTraders1 implements Comparable<GetTraders1> {

    private String getTraderLegalName;
    private String businessName;
    private Object status;

    public GetTraders1(String getTraderLegalName, String businessName, String status) {
        this.getTraderLegalName=getTraderLegalName;
        this.businessName=businessName;
        this.status=status;
    }

    @Override
    public int compareTo(GetTraders1 that) {
        return this.getTraderLegalName.compareTo(that.getTraderLegalName);
    }

    @Override
    public String toString() {
        return "GetTraders [getTraderLegalName=" + getTraderLegalName + ", businessName=" + businessName + ", status=" + status + "]";
    }

    public static void main(String[] args) {

        GetTraders1 getTraders1 = new GetTraders1("1", "bn", "status");
        GetTraders1 getTraders2 = new GetTraders1("2", "bn", "status");
        GetTraders1 getTraders3 = new GetTraders1("3", "bn", "status");

        List<GetTraders1> list = new ArrayList<>();
        list.add(getTraders3);
        list.add(getTraders2);
        list.add(getTraders1);

        System.out.println(list);

        Collections.sort(list);

        System.out.println(list);

    }

}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
公共类GetTraders1实现了可比较的{
私有字符串getTraderLegalName;
私有字符串商业名称;
私有对象状态;
public GetTraders1(字符串getTraderLegalName、字符串businessName、字符串status){
this.getTraderLegalName=getTraderLegalName;
this.businessName=businessName;
这个状态=状态;
}
@凌驾
公共int比较(GetTraders1){
返回this.getTraderLegalName.compareTo(that.getTraderLegalName);
}
@凌驾
公共字符串toString(){
返回“GetTraders[getTraderLegalName=“+getTraderLegalName+”,businessName=“+businessName+”,status=“+status+””;
}
公共静态void main(字符串[]args){
GetTraders1 GetTraders1=新的GetTraders1(“1”、“bn”、“status”);
GetTraders1 getTraders2=新的GetTraders1(“2”,“bn”,“status”);
GetTraders1 getTraders3=新的GetTraders1(“3”,“bn”,“status”);
列表=新的ArrayList();
list.add(getTraders3);
list.add(getTraders2);
list.add(getTraders1);
系统输出打印项次(列表);
集合。排序(列表);
系统输出打印项次(列表);
}
}
2) 基于比较器的解决方案

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class GetTraders2 {

    private String getTraderLegalName;
    private String businessName;
    private Object status;

    public GetTraders2(String getTraderLegalName, String businessName, String status) {
        this.getTraderLegalName=getTraderLegalName;
        this.businessName=businessName;
        this.status=status;
    }

    @Override
    public String toString() {
        return "GetTraders [getTraderLegalName=" + getTraderLegalName + ", businessName=" + businessName + ", status=" + status + "]";
    }

    public static void main(String[] args) {

        GetTraders2 getTraders1 = new GetTraders2("1", "bn", "status");
        GetTraders2 getTraders2 = new GetTraders2("2", "bn", "status");
        GetTraders2 getTraders3 = new GetTraders2("3", "bn", "status");

        List<GetTraders2> list = new ArrayList<>();
        list.add(getTraders3);
        list.add(getTraders2);
        list.add(getTraders1);

        System.out.println(list);

        Collections.sort(list, new Comparator<GetTraders2>() {

            @Override
            public int compare(GetTraders2 o1, GetTraders2 o2) {
                return o1.getTraderLegalName.compareTo(o2.getTraderLegalName);
            }

        });

        System.out.println(list);

    }

}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
公开课