如何对对象集合进行排序?

时间:2017-03-31 11:53:02

标签: java list sorting

我有一个班级Gym,其中包含以下字段:

private int id;

private String name;

private String street;

private String housenumber;

private String zipcode;

private String lat;

private String lng;

private String city;

所有数据都在数据库中。用户可以通过一些creteria过滤健身房:运动和距离。我有一个函数可以将所有的健身房从数据库中取出并将它们添加到布局中。

latlng字段也在数据库中。

当用户请求所有健身房时,使用以下代码计算用户与位置之间的距离:

double distance = Math.round(gpsHelper.calculateDistance(location.getLatitude(), Double.valueOf(gym.getLat()),
                location.getLongitude(), Double.valueOf(gym.getLng()), 0.0, 0.0));
 DecimalFormat df = new DecimalFormat("#.##");
String formattedDistance = "Afstand: " + String.valueOf(df.format(distance)) + " km";

我想做的是:我想按照他们与用户的距离对所有健身房进行排序。所以按df.format(distance)排序。

有人能帮我推进正确的方向吗?我想我已经添加了相关的代码。

1 个答案:

答案 0 :(得分:3)

Collections.sort

Collections.sort(List<T> list)根据元素的自然顺序将指定列表按升序排序。

例如:

List<String> fruits = new ArrayList<String>();

fruits.add("Pineapple");
fruits.add("Apple");
fruits.add("Orange");
fruits.add("Banana");

Collections.sort(fruits);

int i=0;
for(String temp: fruits){
    System.out.println("fruits " + ++i + " : " + temp);
}

将作为输出:

fruits 1 : Apple
fruits 2 : Banana
fruits 3 : Orange
fruits 4 : Pineapple

请参阅:Java object sorting example (Comparable and Comparator)

中的其他示例

比较

Comparator是一个比较函数,它对某些对象集合强加了一个总排序。比较器可以传递给排序方法(例如Collections.sortArrays.sort),以便精确控制排序顺序。

Collections.sort(people, new Comparator<Person>() {

    @Override
    public int compare(Person o1, Person o2) {
        return o1.getLastName().compareTo(o2.getLastName());
    }
});

Lambda表达式

Java 8引入了Lambda ExpressionsComparator的等价物是:

Comparator<Person> people =
    (Person o1, Person o2)->o1.getLastName().compareTo(o2.getLastName());