我有一个 ArrayList,我在其中存储诸如CustomerName、Type、Distance、State 之类的值,并使用这个 ArrayList 来显示 ListView。 我创建了一个 comaprator,我在其中根据客户的类型对客户进行排序,如下所示。
Type1 - Gold
Type2 - Silver
Type3 - Other
我已成功完成排序,但我还必须添加一件事,我将用下面的示例进行解释。
解释 :-
在我的应用程序中,我们有高级用户作为 Gold & Silver 类型。其他类型的用户是非高级用户。当用户从我的应用程序进行一些搜索时,我有网络服务来获取数据。它基于州、城市和 Readius(即 25 英里/50 英里等距离)。
例如,您搜索New Jersy(State/Province)、Mahwah(City) & Radius 为 25miles,因此它将根据这些条件为您提供可用结果列表。现在发生的情况是,在此搜索中,还包括了一些外状态结果,因为它们满足Radius Criteria。就像我搜索这个一样,我也会得到New York(State/Province)的结果。问题出现在这里是因为在纽约州我有一些黄金类型的用户,因此纽约州的 CustomerName 转到 NewJersy Silver 类型用户的顶部。
Web 服务调用的结果 =
CustomerName - ABCD
Type - Silver
State - New Jersy
Distance - 1mile
CustomerName - DEF
Type - Gold
State - New York
Distance - 20mile
CustomerName - XYZ
Type - Gold
State - New York
Distance - 22mile
CustomerName - PQR
Type - Other
State - New Jersy
Distance - 5mile
使用 My Comparator Rsult 排序后 =
CustomerName - DEF
Type - Gold
State - New York
Distance - 20mile
CustomerName - XYZ
Type - Gold
State - New York
Distance - 22mile
CustomerName - ABCD
Type - Silver
State - New Jersy
Distance - 1mile
CustomerName - PQR
Type - Other
State - New Jersy
Distance - 5mile
我实际上想要什么作为结果=
CustomerName - ABCD
Type - Silver
State - New Jersy
Distance - 1mile
CustomerName - DEF
Type - Gold
State - New York
Distance - 20mile
CustomerName - XYZ
Type - Gold
State - New York
Distance - 22mile
CustomerName - PQR
Type - Other
State - New Jersy
Distance - 5mile
我的标准是 -> 我想在用户搜索的列表顶部显示高级用户列表(即,如果您搜索新泽西州而不是在顶部显示该州/省的所有高级用户),而不是 OUT STATE(即如果纽约州数据来自给定半径)高级用户和其他(无论它是哪个州数据)类型的用户的底部其余部分。
比较器 -
public class VendorTypeComparator implements Comparator<HashMap<String, String>>{
List<String> preDefinedOrder;
public VendorTypeComparator(String[] order) {
// TODO Auto-generated constructor stub
// order is {"Gold", "Silver", "Other"}
this.preDefinedOrder = Arrays.asList(order);
}
@Override
public int compare(HashMap<String, String> o1, HashMap<String, String> o2) {
// TODO Auto-generated method stub
return preDefinedOrder.indexOf(o1.get("VendorType").toString()) - preDefinedOrder.indexOf(o2.get("VendorType").toString());
}
}
请提供您的建议以解决此问题。
谢谢