Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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/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
Java 从按字母顺序排列的列表中重新排列两个值。枚举/比较AOR_Java_Sorting_Enums_Comparator_Comparable - Fatal编程技术网

Java 从按字母顺序排列的列表中重新排列两个值。枚举/比较AOR

Java 从按字母顺序排列的列表中重新排列两个值。枚举/比较AOR,java,sorting,enums,comparator,comparable,Java,Sorting,Enums,Comparator,Comparable,值A、B、C、D、E、F、G的编码列表。。。。 在JSP中迭代列表时,我希望将D放在C之前 我对enum或使用比较器持开放态度 目前,枚举排序器是与我目前拥有的可比较对象不同的对象 那么我如何处理下面的代码呢 //override public int compareTo(Alphabets) { return name.toLowerCase().compareTo(o.getName().toLowerCase()); } 我试过了 private

值A、B、C、D、E、F、G的编码列表。。。。 在JSP中迭代列表时,我希望将D放在C之前

我对enum或使用比较器持开放态度

目前,枚举排序器是与我目前拥有的可比较对象不同的对象

那么我如何处理下面的代码呢

//override

    public int compareTo(Alphabets) {

        return name.toLowerCase().compareTo(o.getName().toLowerCase());
      }
我试过了

private SortOrder so
     public void setName(String name) {
        this.name = so.values().toString();
      }
但是它抛出“应该以静态方式访问类型SortOrder中的静态方法值()

请帮帮我

我尝试了stackoverflow,发现这很接近,但还不够:


编辑:很抱歉把大家弄糊涂了,上面的问题只是我的问题的一个表现。我对A,B,C,的词,。。在我的代码中有不同的表示。
我有一个产品的品牌名称列表,我想在其中重新排序。

基本上,您对默认的比较很满意,但您只希望有一点不同,对吗

if (this.name.equals("D2") && that.name.equals("D1")) return -1;
if (this.name.equals("D1") && that.name.equals("D2")) return 1;
return super.compareTo(that);

基本上,您对默认的compareTo很满意,但您只希望有一点不同,对吗

if (this.name.equals("D2") && that.name.equals("D1")) return -1;
if (this.name.equals("D1") && that.name.equals("D2")) return 1;
return super.compareTo(that);

我仍然不太确定我是否理解你的问题,但如果我理解,以下是两种解决方案:

使用枚举 最小解决方案,仅限于枚举值的可能名称

处理

Collections.sort(testData, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return SortOrderEnum.valueOf(s1).compareTo(SortOrderEnum.valueOf(s2));
    }
});
Collections.sort(testData, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return SORT_ORDER.get(s1).compareTo(SORT_ORDER.get(s2));
    }
});
Collections.sort(testData,新的Comparator(){
@凌驾
公共整数比较(字符串s1、字符串s2){
返回SortOrderEnum.valueOf(s1).compareTo(SortOrderEnum.valueOf(s2));
}
});
无枚举 你可以放任何你想要的字符串,我不认为在这个解决方案中使用枚举有什么意义。我们将每个字符串的预期索引放入静态映射中

公共类排序器{
公共静态最终映射排序顺序=initializeSortOrder();
私有静态映射初始值SetOrder(){
List orderedStrings=Arrays.asList(
“A”,
“B”,
“D”,
“C”,
“E”,
“F”
);
Map indexByString=newhashmap();
对于(int index=0;index
处理

Collections.sort(testData, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return SortOrderEnum.valueOf(s1).compareTo(SortOrderEnum.valueOf(s2));
    }
});
Collections.sort(testData, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return SORT_ORDER.get(s1).compareTo(SORT_ORDER.get(s2));
    }
});
Collections.sort(testData,新的Comparator(){
@凌驾
公共整数比较(字符串s1、字符串s2){
返回SORT_ORDER.get(s1).compareTo(SORT_ORDER.get(s2));
}
});
请注意,这是一个如何填充地图的示例。您可以(更好)从配置文件填充字符串->索引映射


如果这会给您带来问题,您也不能将map放入静态变量。

我仍然不太确定我是否理解您的问题,但如果我理解,以下是两种解决方案:

使用枚举 最小解决方案,仅限于枚举值的可能名称

处理

Collections.sort(testData, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return SortOrderEnum.valueOf(s1).compareTo(SortOrderEnum.valueOf(s2));
    }
});
Collections.sort(testData, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return SORT_ORDER.get(s1).compareTo(SORT_ORDER.get(s2));
    }
});
Collections.sort(testData,新的Comparator(){
@凌驾
公共整数比较(字符串s1、字符串s2){
返回SortOrderEnum.valueOf(s1).compareTo(SortOrderEnum.valueOf(s2));
}
});
无枚举 你可以放任何你想要的字符串,我不认为在这个解决方案中使用枚举有什么意义。我们将每个字符串的预期索引放入静态映射中

公共类排序器{
公共静态最终映射排序顺序=initializeSortOrder();
私有静态映射初始值SetOrder(){
List orderedStrings=Arrays.asList(
“A”,
“B”,
“D”,
“C”,
“E”,
“F”
);
Map indexByString=newhashmap();
对于(int index=0;index
处理

Collections.sort(testData, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return SortOrderEnum.valueOf(s1).compareTo(SortOrderEnum.valueOf(s2));
    }
});
Collections.sort(testData, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return SORT_ORDER.get(s1).compareTo(SORT_ORDER.get(s2));
    }
});
Collections.sort(testData,新的Comparator(){
@凌驾
公共整数比较(字符串s1、字符串s2){
返回SORT_ORDER.get(s1).compareTo(SORT_ORDER.get(s2));
}
});
请注意,这是一个如何填充地图的示例。您可以(更好)从配置文件填充字符串->索引映射


如果这会给您带来问题,您也不能将映射放在静态变量中。

我认为我们需要更多的代码(至少是
SortOrder
类)来理解抛出的异常。另外,您能否澄清预期的排序规则?它是以不区分大小写的字母升序排序值,除非有数字后缀,否则后缀是降序的吗?D2是唯一的大小写,还是任何字母数字都应该以这种特殊方式排序?编辑:很抱歉让大家感到困惑,上面的问题只是我的问题的一个代表。我对A,B,C,的词,。。在我的代码中有不同的表示。我有一个产品的品牌名称列表,我想在其中重新订购该列表@Volune Thanks我认为我们需要更多的代码(至少是
SortOrder
类)来理解抛出的异常。另外,您能否澄清预期的排序规则?它是以不区分大小写的字母升序排序值,除非有数字后缀,否则后缀是降序的吗?D2是唯一的大小写,还是任何字母数字都应该以这种特殊方式排序?编辑:很抱歉让大家感到困惑,上面的问题只是我的问题的一个代表。我对A,B,C,的词,。。在我的代码中有不同的表示。我有一个产品的品牌名称列表,我想在其中重新订购该列表@沃伦,谢谢