簡體   English   中英

如何在Java中對arraylist進行排序

[英]How to sort a arraylist in java

基本上可以通過以下方式進行排序:

Collections.sort(列表);

但是我的情況有點不同。 我有一個包含以下對象的列表。

示例代碼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
    }
}

這里的問題是,一旦我在交易者arraylist中添加了所有值,我就需要排序並顯示為輸出。 我嘗試了collections.sort(),但它顯示了編譯器異常。

如果仔細查看Collections API ,您會發現有兩個選擇可供使用:

1)使您的GetTraders類實現Comparable接口並調用

public static <T extends Comparable<? super T>> void sort(List<T> list)

2)為GetTraders類創建一個新的Comparator並調用

public static <T> void sort(List<T> list, Comparator<? super T> c)

第一種解決方案是最簡單的解決方案,但是如果您需要根據多個條件對GetTraders對象進行排序,那么第二種解決方案是最佳選擇。

正如@Vaseph指出的那樣,如果您使用的是Java 8,則生活會變得更加輕松,因為您需要做的只是:

traders.sort((GetTraders trade1, GetTraders trade2) -> {
    return trade1.getBusinessName().compareTo(trade2.getBusinessName());
});

但是,如果您在使用Comparable和Comparator接口時遇到麻煩,我建議您先嘗試Java-8之前的解決方案,然后再進入功能接口的神奇世界。


為了完整起見,請在下面還找到每個解決方案的示例:

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);

    }

}

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);

    }

}

這是基於businessName對列表元素進行排序的另一種方法:

 traders.sort((GetTraders trade1, GetTraders trade2) -> {
    return trade1.getBusinessName().compareTo(trade2.getBusinessName());
 });

這沒有被提議,但是在這里。

您應該將Collections#sortComparator

Collections.sort(traders, (x, y) -> x.getXXX().compareTo(y.getXXX()));
// XXX could be any String object's getter

使用Comparator器確定順序。

Collections.sort(someList, comparator);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM