0

我有一个结果列表,ArrayList<PlacedObject> result

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];
}

设置后po.distance,我想按distance属性对列表进行排序。在 c# 中我会使用 linq,但在 java 中有没有类似的解决方案?

谢谢


当前解决方案:

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

1 回答 1

3

这是通过实现一个Comparator<T>类来完成的:

一个比较函数,它对某些对象集合进行总排序。比较器可以传递给排序方法(例如 Collections.sort 或 Arrays.sort),以允许精确控制排序顺序。

它可以通过Collections.sort(list, compare)应用于您的列表。基本上,您实现自己的 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以相同的方式应用。

于 2012-07-09T00:50:12.947 回答