Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
根据从映射中获得的优先级对ArrayList进行排序(Java版本<;Java8)_Java_Sorting_Arraylist_Hashmap - Fatal编程技术网

根据从映射中获得的优先级对ArrayList进行排序(Java版本<;Java8)

根据从映射中获得的优先级对ArrayList进行排序(Java版本<;Java8),java,sorting,arraylist,hashmap,Java,Sorting,Arraylist,Hashmap,根据从映射中获得的优先级对具有字符串的ArrayList进行排序的最佳方法是什么 例如: 我有一个为特定用例分配优先级的映射(我在字符串中寻找的Key:pattern和Value:Priority) 这种方法目前有效,但我认为在数据量很大的情况下,这不是一种好方法 有没有更好的办法来解决这个问题 PS:我知道在Java8中有一个更好的解决方案。但不幸的是,我无法使用它,所以如果有人能给我一个更好的解决方案,而不是Java8,那将是一件好事 提前感谢您的时间。您只需要一个比较器,根据两个字符串的优

根据从映射中获得的优先级对具有字符串的ArrayList进行排序的最佳方法是什么

例如: 我有一个为特定用例分配优先级的映射(我在字符串中寻找的Key:pattern和Value:Priority)

这种方法目前有效,但我认为在数据量很大的情况下,这不是一种好方法

有没有更好的办法来解决这个问题

PS:我知道在Java8中有一个更好的解决方案。但不幸的是,我无法使用它,所以如果有人能给我一个更好的解决方案,而不是Java8,那将是一件好事


提前感谢您的时间。

您只需要一个比较器,根据两个字符串的优先级比较它们:

Comparator<String> priorityBasedComparator = new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        int priority1 = pMap.get(s1.substring(2, 3));
        int priority2 = pMap.get(s2.substring(2, 3));
        return Integer.compare(priority1, priority2);
    }
}
Collections.sort(list, priorityBasedComparator);
Comparator priorityBasedComparator=新的比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
int priority1=pMap.get(s1.子串(2,3));
int priority2=pMap.get(s2.子串(2,3));
返回整数。比较(优先级1,优先级2);
}
}
Collections.sort(list,priorityBasedComparator);

当然,
pMap
应该声明为
Map
而不是原始映射(您不应该使用原始类型)。它应该是比较器中可用的
final

您只需要一个比较器,根据两个字符串的优先级比较它们:

Comparator<String> priorityBasedComparator = new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        int priority1 = pMap.get(s1.substring(2, 3));
        int priority2 = pMap.get(s2.substring(2, 3));
        return Integer.compare(priority1, priority2);
    }
}
Collections.sort(list, priorityBasedComparator);
Comparator priorityBasedComparator=新的比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
int priority1=pMap.get(s1.子串(2,3));
int priority2=pMap.get(s2.子串(2,3));
返回整数。比较(优先级1,优先级2);
}
}
Collections.sort(list,priorityBasedComparator);

当然,
pMap
应该声明为
Map
而不是原始映射(您不应该使用原始类型)。它应该是
final
,可以从比较器中使用。

为什么不简单地编写一个自定义比较器,该比较器具有您所追求的优先级,然后使用Collections.sort对列表进行排序,每次调用compareTo方法时,您可以从值中提取值并进行比较为什么不简单地编写一个具有您所追求的优先级的自定义比较器,然后使用Collections.sort对列表进行排序,每次调用compareTo方法时,您都可以从值中提取值并进行比较:pMap是映射,pMap.get()从映射返回优先级。我错过了什么吗?对不起,可能很糟,只是进入子字符串,错过了其余的:P-我把它作为op提供了一个值从地图,不是使用地图来查找每个值的优先级,但这使你如此明智!这正是我想要的。:)它就是这样做的:pMap是映射,pMap.get()从映射返回优先级。我错过了什么吗?对不起,may bad,只是进入了子字符串,错过了其余部分:P-我认为op会从映射中提供一个值,而不是使用映射来查找每个值的优先级,但这更合理,谢谢!这正是我想要的。:)
Comparator<String> priorityBasedComparator = new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        int priority1 = pMap.get(s1.substring(2, 3));
        int priority2 = pMap.get(s2.substring(2, 3));
        return Integer.compare(priority1, priority2);
    }
}
Collections.sort(list, priorityBasedComparator);