当前位置: 首页 > 知识库问答 >
问题:

如何在Java中自定义排序集

黄博艺
2023-03-14
public static void main(String[] args) {
    // TODO Auto-generated method stub
    sortDates(Arrays.asList(new DAY[]{DAY.MON,DAY.WED,DAY.TUE,DAY.THU,DAY.SUN,DAY.SAT,DAY.FRI}));
}
public static void sortDates(List<DAY> dayList){
    Set<DAY> set = new TreeSet<DAY>(dayList);
    for(DAY day : set)
    {
        System.out.println(day);
    }
}
public enum DAY {
    MON("MONDAY"),TUE("TUESDAY"),WED("WEDNESDAY"),THU("THURSDAY"),FRI("FRIDAY"),SAT("SATURDAY"),SUN("SUNDAY");

    private String m_name;

    DAY(String name) {
        m_name=name;
    }
}

这段代码的输出是:周一周二周三周四周五周六周日

但是我想要的输出是这样的SUN MON TUE WED THU FRI SAT

这意味着我想定制排序功能,将星期天移到第一天。

我该怎么做?提前谢谢。

共有3个答案

法烨烨
2023-03-14

以下方法(使用比较器)需要枚举类中的标识符:

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class week {

    public static void main(String[] args) {
        Comparator<DAY> myComparator = new Comparator<DAY>() {

            @Override
            public int compare(DAY o1, DAY o2) {
                if (o1.getPrio() == o2.getPrio()) {
                    return 0;
                } else if (o1.getPrio() < o2.getPrio()) {
                    return -1;
                }
                return 1;
            }
        };

        sortDates(Arrays.asList(new DAY[] { DAY.MON, DAY.WED, DAY.TUE, DAY.THU, DAY.FRI, DAY.SUN, DAY.SAT }),
                myComparator);

    }

    public static void sortDates(List<DAY> dayList, Comparator<DAY> comparator) {
        Set<DAY> setd = new TreeSet<DAY>(comparator);
        setd.addAll(dayList);

        Set<DAY> set = new TreeSet<DAY>(dayList);
        for (DAY day : set) {
            System.out.println(day);
        }
        System.out.println("comparator:");
        for (DAY day : setd) {
            System.out.println(day);
        }
    }

    public enum DAY {
        MON("MONDAY", 1), TUE("TUESDAY", 2), WED("WEDNESDAY", 3), THU("THURSDAY", 4), FRI("FRIDAY", 5), SAT("SATURDAY",
                6), SUN("SUNDAY", 0);

        private final String m_name;
        private final int prio;

        DAY(String name, int prio) {
            m_name = name;
            this.prio = prio;
        }

        public int getPrio() {
            return prio;
        }
    }

}
郭元凯
2023-03-14

@Marco13的答案是迄今为止最正确的:您需要一个自定义比较器来执行您的排序。

幸运的是,谷歌番石榴有一个实用工具:订购。显式()。

private static Comparator<DAY> AM_ORD = Ordering.explicit(DAY.Sun, ... DAY.Sat);
private static Comparator<DAY> EU_ORD = Ordering.explicit(DAY.Mon, ... DAY.Sun);

public static void sortDates(List<DAY> dayList, boolean am)
{
    Set<DAY> set = new TreeSet<DAY>(am ? AM_ORD : EU_ORD);
    set.addAll(dayList);
    for (DAY day : set)
    {
        System.out.println(day);
    }
}
禄和宜
2023-03-14

试试这个。

    import java.util.*;

public class SortDays {


     public static void main(String[] args) {
         // TODO Auto-generated method stub
         sortDates(Arrays.asList(new DAY[]{DAY.MON,DAY.WED,DAY.TUE,DAY.THU,DAY.SUN,DAY.SAT}));
     }
     public static void sortDates(List<DAY> dayList){
         Collections.sort(dayList, new Comparator<DAY>() {
                public int compare(DAY day1, DAY day2) {
                    return day1.getWeight() - day2.getWeight();
                }});
         System.out.println("sortedlist is" + dayList.toString());
     }



}

 enum DAY {
     MON("MONDAY", 2) ,TUE("TUESDAY", 3),WED("WEDNESDAY", 4),THU("THURSDAY", 5),FRI("FRIDAY", 6),SAT("SATURDAY", 7),SUN("SUNDAY", 1);

     private String m_name;
     private int m_weight;

     DAY(String name, int weight) {
         m_name=name;
         m_weight = weight;
     }

     public int getWeight() {
         return this.m_weight;
     }
 }
 类似资料:
  • 问题内容: 我使用atocomplete.jquery插件来建议输入文本,结果得到了这个数组: 当我开始搜索从子字符串开始的东西时,它显示出数组排序如下: 我需要这样的东西: 有任何想法吗? 问题答案: 该插件可能区分大小写。尝试输入而不是。您可能将结果设置为不区分大小写。这个问题可能会有所帮助。 对于上的自定义排序函数,您可以使用任何JavaScript函数并将其作为参数传递给的方法,如下所示:

  • 问题内容: 我想为汽车清单开发一个排序演示。我正在使用数据表显示汽车列表。现在实际上我想按汽车颜色对列表进行排序。这里不是按字母顺序排序的。我想使用我的自定义排序顺序,例如先是红色汽车,然后是蓝色,等等。 为此,我尝试使用,但它只允许按字母顺序排序。 因此,任何人都可以指导我实现使用该技术的方法,以便使排序变得更快。 问题答案: 我建议你为汽车颜色创建一个枚举,而不要使用字符串,并且枚举的自然顺序

  • 问题内容: 我有一个[],其中有一些数字(距离某个点的距离)。 我想在第一个数组中创建索引数组,其中索引按距离排序。 例如 假设 那我想得到一个像这样的数组: 因此,如果要第二近距离,可以检查dist [sortedIndexes [1]]。 我不想对原始数组进行排序,而只是根据距离对索引数组进行排序。 更新1:我正在尝试的代码如下所示: 但是我遇到了一些错误,其中最“有问题”的是:“ 无法引用用

  • 问题内容: 我有一个列表列表,例如第3个值始终为或。我该如何调用以使列表基于以下内容进行排序: 第一个索引 如果第一个索引相同,则排在第一位。 谢谢 问题答案: 编写一个自定义函数。

  • 我试图在PrimeFaces数据表上实现一个排序函数。我已经创建了一个模型对象列表。我们有一个问题是表的排序顺序。排序列包含整数和字符串值。当我应用等默认排序机制时,列表是基于ASCII顺序排序的。下面是排序结果的图像。我目前正在使用PrimeFaces V5.2.5 谁能指导我如何克服这个问题。

  • 问题内容: 我有这样的查询: 但是,当我打印出来时,它会自动进行1,2,3,4,5的排序。我们如何在不更改数据库结构的情况下保持顺序(2,4,1,5,3)? 谢谢! 问题答案: 我问这个: mysql按问题排序 我得到的答案和所有功劳归于他们: 您可以使用CASE运算符指定顺序: 在PHP中,你可以像这样: