如何对对象集合进行排序?
问题描述:
我有一个类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;
所有的数据是在数据库中。用户可以通过一些标准来过滤健身房:运动和距离。我有一个函数可以将所有gyms从数据库中取出并添加到布局中。
lat
和lng
字段也在数据库中。
当用户请求的所有使用下面的代码计算用户和位置之间的距离体育馆:
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)
排序。
任何人都可以推动我走向正确的方向吗?我想我已经添加了相关的代码。
答
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.sort
或Arrays.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 Expressions和Comparator
的等价物是:
Comparator<Person> people =
(Person o1, Person o2)->o1.getLastName().compareTo(o2.getLastName());
可以简化您的例子可能是?像更小,容易验证的东西? – Eugene
如果你有一个健身房列表(列表,那么你应该在Gym类中重写compareTo)(也就是说,你的健身房类应该实现Comparable界面) –
“按每个不均匀指数对它进行排序” - 谨慎解释那是什么基本上,如果你有一个'List list',你可以通过Collections.sort(list,someComparator)对其进行排序,其中'someComparator'是'Comparator '的一个实现(你也可以使'健身房“执行”可比较“,但这只允许你按照一个确切的顺序进行排序,例如名字或距离。如果你需要它们中的任何一个,或者你需要一个比较器) –
Thomas