Java linq等效于获取具有最高值的列表中的属性

时间:2012-07-09 00:43:59

标签: java

我有一个结果列表,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);
}
});

1 个答案:

答案 0 :(得分:3)

这是通过实施Comparator<T>类来实现的:

  

比较函数,它对某些对象集合施加总排序。可以将比较器传递给排序方法(例如Collections.sort或Arrays.sort),以便精确控制排序顺序。

可以使用Collections.sort(list, comparator)将其应用于您的列表。基本上,您实现自己的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