CustomerName、Type、Distance、Stateなどの値を格納しているArrayListが1つあり、このArrayListを使用してListViewを表示しています。 以下のように、タイプに基づいて顧客をソートする1つのコマプラーを作成しました。
Type1 - Gold
Type2 - Silver
Type3 - Other
並べ替えは正常に完了しましたが、追加する必要があることがもう1つあります。これは、以下の例で説明しています。
説明 :-
私のアプリでは、ゴールド&シルバーのタイプとしてプレミアムユーザーがいます。他のタイプのユーザーは非プレミアムユーザーです。ユーザーがアプリから検索を行ったときにデータを取得するためのWebサービスがあります。州、市、およびReadiusに基づいています(つまり、25マイル/ 50マイルなどの距離) 。
たとえば、ニュージャージー(州/県)、マフア(市)、半径を25マイルで検索した場合、これらの基準に基づいて利用可能な結果のリストが表示されます。ここで何が起こるかというと、この検索では、半径基準を満たすため、状態外の結果の一部も含まれています。これを検索すると、ニューヨーク(州/県)の結果も表示されます。ここで問題が発生するのは、ニューヨーク州にゴールドタイプのユーザーがいるため、NewYork州のCustomerNameがNewJersyシルバータイプのユーザーの先頭に移動するためです。
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
コンパレータでソートした後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());
}
}
これを解決するための提案をお願いします。
ありがとう