Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 排序数组列表<;HashMap>;使用不同标准的比较器_Android_Arraylist_Sorting_Comparator - Fatal编程技术网

Android 排序数组列表<;HashMap>;使用不同标准的比较器

Android 排序数组列表<;HashMap>;使用不同标准的比较器,android,arraylist,sorting,comparator,Android,Arraylist,Sorting,Comparator,我有一个ArrayList,其中存储的值包括CustomerName、Type、Distance、State,并使用此ArrayList显示ListView。 我创建了一个comaprator,我在其中根据客户类型对其进行分类,如下所示 Type1 - Gold Type2 - Silver Type3 - Other 我成功地完成了排序,但还有一件事我必须补充,我用下面的例子解释 解释:- 在我的应用程序中,我们有高级用户作为金银类型。其他类型的用户是非高级用户。当用户从我的应用程序进行搜索

我有一个ArrayList,其中存储的值包括CustomerName、Type、Distance、State,并使用此ArrayList显示ListView。 我创建了一个comaprator,我在其中根据客户类型对其进行分类,如下所示

Type1 - Gold
Type2 - Silver
Type3 - Other
我成功地完成了排序,但还有一件事我必须补充,我用下面的例子解释

解释:-

在我的应用程序中,我们有高级用户作为金银类型。其他类型的用户是非高级用户。当用户从我的应用程序进行搜索时,我有网络服务来获取数据。它基于州、城市和Readius(即25英里/50英里等距离)

例如,您搜索了新Jersy(州/省)、Mahwah(市)和半径为25英里的,因此它将根据这些标准为您提供可用结果列表。现在发生的情况是,在这个搜索中,一些输出状态结果也包括在内,因为它们满足半径标准。如果我搜索这个,我也会得到纽约(州/省)的结果。问题出现在这里,因为在纽约州,我有一些黄金类型的用户,正因为如此,纽约州的客户名称位于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
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
使用我的比较器Rsult=

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
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
结果是我想要什么=

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
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
我的标准是->我想在用户搜索的列表顶部显示高级用户列表(即,如果搜索新Jersy,则在顶部显示该州/省的所有高级用户),而不是在州外(即,如果纽约州的数据在给定半径内)高级用户和其他用户的底部(无论是哪种状态数据)用户类型。

比较器-

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());
    }
}
公共类VendorTypeComparator实现Comparator{
列出预定义的顺序;
public VendorTypeComparator(字符串[]顺序){
//TODO自动生成的构造函数存根
//顺序是{“金”、“银”、“其他”}
this.preDefinedOrder=Arrays.asList(order);
}
@凌驾
公共int比较(HashMap o1、HashMap o2){
//TODO自动生成的方法存根
返回预定义的order.indexOf(o1.get(“VendorType”).toString())-preDefinedOrder.indexOf(o2.get(“VendorType”).toString());
}
}
请提供解决此问题的建议


感谢

一个可能的技巧是基于秩函数建立一个度量。它将允许您仅使用比较器,而无需任何拆分/合并

设计一个将单个搜索结果映射为数字的函数

  • 比如说,把1000万给目标州的任何一个黄金公司,把900万给 那里有银牌吗?其他州有8枚银牌,或者随便什么 逻辑。ABCD将获得10M排名;DEF和XYZ各为9M

  • 然后减去距离。ABCD将得到10M-1;DEF 9M-20和XYZ-9M-22。依此类推

  • 这将把您的结果分成可比较的组,并在组内建立更精细的顺序 那些


让您的比较器比较o1和o2上调用的结果。如果为零,则按字典顺序比较其他内容,例如名称。就是这样。

您还可以单独说明您要查找的排序标准吗?(如状态>类型>半径)基本上,我希望如果你搜索新的Jersy州,那么该州的所有溢价结果都应该排在其他州溢价结果的前面,低于其他州溢价结果,其余的是其他类型。这背后的原因是新Jersy的溢价用户(黄金/白银)如果有人搜索该州,请付费让我们在顶部显示他们的姓名,如果我们在顶部显示该州的姓名,则对业务不利。这个想法非常直截了当,即在列表的顶部,我想向州内高级用户显示金/银类型,而不是州外高级用户,以及其他类型的用户是否在底部。Y您的意思是将结果拆分为金/银和其他。进一步将金/银部分拆分为状态内和状态外。按类型(先金,后银)对状态内和状态外部分进行排序,并将其与状态内和状态外部分进行重新组合。最后添加其他部分(再次按状态排序)。因此,您需要拆分结果。