在Android应用程序中,我调用Web服务,获取json响应并将其放入Hashmap的ArrayList中(JSON中返回的每个标识符都有一个字段。
我存储[n]项目的列表定义为:
private ArrayList<HashMap<String, String>> customerDataList;
当我收到数据时,我创建了一个新的Hashmap集合,如下所示:
HashMap<String, String> customer = new HashMap<>();
然后我只需添加我需要的值,例如
JSONObject thisCustomer = customerArr.getJSONObject(customerIndex);
String customerName = thisCustomer.getString(TAG_CUSTOMER_NAME);
customer.put(TAG_CUSTOMER_NAME, customerName);
double location = // get location based on GPS
customer.put(TAG_LOCATION, location);
// snip...
然后,当我填充该客户对象后,我将其添加到列表中:
customerDataList.add(customer);
现在,我想按一个值(我在上面设置的位置)对这些数据进行排序。
目前,在我填充了customerDataList后,我遍历它,构建一个包含所有位置的数组,对其进行排序,然后循环遍历排序的数组。在其中,我循环遍历customerDataList并将外部位置(已排序的值)与内部进行比较,并构建另一个已排序的customerDataList。
有没有办法可以排序而不需要3个循环?
编辑:Mike让您的解决方案适用于双打吗?
未分类的位置如下
1513.70
702.59
814.59
604.99
然而,我打电话给你的班级后的最终名单是
1513.70
604.99
702.59
814.59
答案 0 :(得分:4)
如果我正确理解了这个问题,听起来你可以使用自定义比较器来排序数组列表:
public class LocationComparator
implements Comparator<HashMap<String, String>>
{
@Override
public int compare(HashMap<String, String> o1,
HashMap<String, String> o2)
{
return Double.compare(o1.get(TAG_LOCATION), o2.get(TAG_LOCATION));
}
}
Collections.sort(customerDataList, new LocationComparator());
当然,您可以使用匿名类来内联实现Comparator<>
接口。
但是,除此之外,为什么要将客户实体存储在哈希映射中?这似乎很浪费..