2016-01-24 102 views
0

因此,我有一個包含另一個類對象作爲其數據成員的類。我已經創建了一個基於這個原型的ArrayList。下面是代碼:基於類數據成員的數據成員對ArrayList進行排序

package Stack; 

import java.io.*; 
import java.util.*; 


    class Point 
    { 
     int x; 
     int y; 

     Point(int x, int y) 
     { 
      this.x = x; 
      this.y = y; 
     } 
    } 

    public class MergeInterval 
    { 

     Point P; 

     MergeInterval() {} 


     public static void main(String args[]) 
     { 
      ArrayList<Point> arr = new ArrayList<Point>(); 
      // Point p = new Point(6,8); 

      arr.add(new Point(6,8)); 
      arr.add(new Point(1,9)); 
      arr.add(new Point(2,4)); 
      arr.add(new Point(4,7)); 

     // System.out.println(arr.get(1).x + " " + arr.get(1).y); 

     } 
    } 

我需要梳理此ArrayList才能得到輸出如下: {1,9} {2,4} {4,7} {6,8}

基本上我需要基於Class'Point'的'x'變量對這個結構進行排序,但是使用內置的'sort'方法。我如何實現它?

回答

0

List.sort(...) method需要一個Comparator,它確定列表中的元素應該如何相互比較以確定順序。您可以自己實施Comparator以指定Point需要比較它們的x值(需要幾行代碼),也可以使用其中一個內置Comparator s進行比較。

Comparator接口定義了默認實現,用於您希望通過某種簡單函數進行比較的情況。

由於您是在int性能比較,你可以使用Comparator.comparingInt如下:

arr.sort(Comparator.comparingInt(p -> p.x)); 
+0

這有幫助。謝謝! –

0

的一種方式做到這一點,如果你點類實現可比會。像排序這樣的過程需要進行某種比較。請看看這link

在這種情況下,您的Point類將實現Comparable。爲了這個工作,你的Point類還需要一個compareTo(Point other)方法。在你的情況下,如果this.x == other.x,則此函數返回0,如果this.x < other.x則返回-1,否則返回1。

這是否回答你的問題?

+0

爲什麼'Point'需要具有可比性? OP想要用'x'值來排序,這是一個int值。 –

+0

它不是一個需要排序的Point對象的ArrayList嗎? –

+0

是的,但是[「內置」'sort'方法](http://docs.oracle.com/javase/8/docs/api/java/util/List.html#sort-java.util.Comparator- )需要一個「比較器」。 「Point」不需要「可比」。 –

0

創建一個比較像這樣:

Comparator<Point> comparator = new Comparator<Point>() { 

    @Override 
    public int compare(Point o1, Point o2) { 
     return Integer.compare(o1.x, o2.x); 
    } 
}; 

arr.sort(comparator); 

已填充列表後,您可以添加該代碼。

+0

謝謝。有用! –

+0

它有效,但它有點老派,比它可能更冗長。在Java 8中,通常使用「Comparator」進行排序的習慣用法是將lambda表達式傳遞給方法。匿名內部類是如此,非常... Java 5。 – scottb

相關問題