2012-07-09 35 views
0

林有結果的列表,ArrayList<PlacedObject> result:在po.distance設置的Java LINQ相當於與最高值獲取屬性列表

for(PlacedObject po : result){ 

    float[] results = new float[3]; 

    Location.distanceBetween(lastlocation.getLatitude() 
    ,lastlocation.getLongitude() 
    ,Double.parseDouble(po.lat) 
    ,Double.parseDouble(po.lng) , 
    results); 

    po.distance = results[0]; 
} 

後,我想通過distance屬性進行排序名單。在C#中我會使用LINQ,但有沒有在Java中的任何類似的解決方案?

由於


當前的解決方案:

Collections.sort(result, new Comparator<PlacedObject>(){ 
public int compare(PlacedObject s1, PlacedObject s2) { 
    return (int) (s1.distance - s2.distance); 
} 
}); 
+0

它是否可以一直保持列表的排序?那麼你可能會碰到'SortedSet '。這樣你就不必手動應用排序。 http://docs.oracle.com/javase/6/docs/api/java/util/SortedSet.html – 2012-07-09 01:02:28

回答

3

這是通過Comparator<T>類的實現來完成:

的比較函數,其條件,對某些的總體排序對象的集合。可以將比較器傳遞給排序方法(如Collections.sort或Arrays.sort),以便精確控制排序順序。

它可以應用於您的名單Collections.sort(list, comparator)。基本上你實現你自己的比較器並將它傳遞給方法。

實現可能例如使用匿名內部類:

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

    @Override 
    public int compare(PlacedObject po1, PlacedObject po2) { 
     return Double.valueOf(po1.distance).compareTo(po2.distance); 
    } 
}); 

如果你只在最高位數的,因爲你的標題表明,還有Collections.max這是在相同的方式應用。

+0

謝謝,請檢查我的更新。那就是我想出來的。它看起來不錯,或者我應該改變這個嗎? – Johan 2012-07-09 01:01:08

+0

與上面的代碼和我的代碼有什麼不同? – Johan 2012-07-09 01:07:06

+0

@Johan我沒有看到任何區別,它對'compare'返回值的規範很舒服我認爲你對你的實現沒問題。 – 2012-07-09 01:08:52