2016-03-12 68 views
0

基本上可以通过以下方式进行排序:如何在java中对arraylist排序

Collections.sort(List);

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

示例代码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()但它显示编译器异常。

+2

您必须实现比较适合您的课堂GetTraders。 – waxtah

+1

实现一个[比较器](http://www.tutorialspoint.com/java/java_using_comparator.htm) – Idos

+1

请不要发布格式不正确的代码。代码格式化是出于某种原因 - 使其他人可以轻松阅读和理解您的代码。如果您在没有缩进的情况下发布代码,没有人会麻烦阅读它。我现在已经为你解决了你的代码,但是将来,请自己投入这项工作。 –

回答

7

如果你仔细观察的Collections API,您将看到您在您的处置两个选项:

1)让你的GetTraders类实现可比接口并调用

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

2)为GetTraders类创建一个新的比较器,并致电

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

但是,如果您有可比和比较器接口的烦恼,我鼓励您在深入了解功能接口的魔法世界之前先尝试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); 

    } 

} 
+0

它按预期工作。谢谢。 – ArrchanaMohan

+0

是否可以在这里添加一个条件?如基于getTradelegalname和businessName的排序。 – ArrchanaMohan

+1

如果您现在想按“getTradelegalname”进行排序,并且在相等的情况下按“businessName”进行排序,您可以轻松完成。在Comparable(或Comparator)逻辑中,检查o1.getTraderLegalName.compareTo(o2.getTraderLegalName)的结果,如果它是!= 0,则返回它,否则返回o1.businessName.compareTo(o2.businessName)的结果。在掌握了这些接口之后,看看如何使用比较器接口的新“比较”方法在Java 8中实现它。它更加优雅和简洁。 – fabriziocucci

-4

使用Comparator来确定订单。

Collections.sort(someList, comparator); 
+4

这应该是一个评论(像你已经有的) – Idos

+2

你可以扩展一点,也许解释/描述如何使用比较器? – JonasCz

1

这里是另一种基于businessName排序列表元素的方法:

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

这并没有被提出,但它在这里。

你应该使用Collections#sortComparator

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