根据Java中列表中的最小属性值选择一个对象

Fai*_*eer 6 java arraylist

我上课了

public class LocationDistances {
    String locs;
    double distances;

}
Run Code Online (Sandbox Code Playgroud)

和一个由另一个类中的LocationDistances对象组成的ArrayList

ArrayList<LocationDistances> locsDis = new ArrayList(Arrays.asList(
    new LocatoinDistances("abc",23.234556),
    new LocatoinDistances("xyz",3.3444566),
    . . . 
    . . .
    . . .

));
Run Code Online (Sandbox Code Playgroud)

如何根据locsDis arrayList中LocationDistances.distance的最小值从Array列表中选择LocationDistances.locs?

Dav*_*kys 7

如果你使用的是Java 8(你应该:)):

locsDis.stream().min((first, second) -> Double.compare(first.distance, second.distance)).get();
Run Code Online (Sandbox Code Playgroud)

编辑:决定使这篇文章更全面,以帮助我们仍然局限Java < 8 但可以使用真棒库番石榴:)

Java 6&7使用guava(Google util库):

Ordering<LocationDistances> ordering = new Ordering<LocationDistances>() {
    @Override
    public int compare(LocationDistances left, LocationDistances right) {
        return Double.compare(left.distance, right.distance);
    }
};
return ordering.max(list);
Run Code Online (Sandbox Code Playgroud)


pra*_*ake 5

如果没有重复的距离,这样的东西就会起作用.

LocationDistances min=null;
for(LocationDistances x:locsDis){
    min=(min==null||x.distances<min.distances)?x:min;
}
String minimumDistance=min.locs;
Run Code Online (Sandbox Code Playgroud)

如果有重复的距离使用这样的东西

ArrayList<LocationDistances> min=new  ArrayList<LocationDistances>();

for(LocationDistances x:locsDis){
    if(min.size()==0||x.distances==min.get(0).distances)
           min.add(x);
    else if(x.distances<min.get(0).distances){
           min.clear();
           min.add(x);
    }               
}
Run Code Online (Sandbox Code Playgroud)