【问题标题】:Java Sorting of Collection. Uppercase should come first and then lowercase集合的 Java 排序。大写应该在前,然后是小写
【发布时间】:2016-01-04 17:50:09
【问题描述】:

我有字符串列表。名单如下

ABC,  DAY 1/2, DAY 1/1, DAY 1/16, DAY 1/2, day 1/1, day 1/52, day 1/32.

如何使用比较器对这个字符串列表进行排序并按以下方式对其进行排序

ABC, DAY 1/1, DAY 1/2, DAY 1/16, day 1/1, day 1/32, day 1/52

因此,大写单词应该放在第一位,并且应该通过考虑以降序 1/1、1/2、1/16 等顺序连接的数字进行排序。

我尝试了以下代码。我首先使用集合的默认排序方法对其进行排序。它以大写在前,小写在后进行排序,然后我尝试了自定义代码,但无法按降序排序。

 Collections.sort(list);
 Collections.sort(list, new Comparator<String> (){
            public int compare(String s1, String s2){
                if(s1.toUpperCase().contains("DAY") &&     s2.toUpperCase().contains("DAY") 
                            && !s1.equalsIgnoreCase("DAY")  && !s2.equalsIgnoreCase("DAY")){

                    try{
                        Integer i1 = Integer.valueOf(s1.split("\\/")[1]);
                        Integer i2 = Integer.valueOf(s2.split("\\/")[1]);                           
                        System.out.println(" s1 " + s1 +" and s2 "+ s2 +" compare --> "+s1.compareTo(s2));

                        if(s1.compareTo(s2) > 0){
                            return 1;
                        }else if(s1.compareTo(s2) < 0){
                            if(i1 > i2){
                                return 1;
                            }else{
                                return 0;
                            }
                        }else{
                            return 0;
                        }
                    }catch(Exception e){                            
                        return s1.compareTo(s2);
                    }
                }else{
                    System.out.println("In else--");
                    return 0;
                }
            }

        });

【问题讨论】:

标签: java collections


【解决方案1】:

试试这个:

public static void main(String[] args) {

        String data="ABC,  DAY 1/2, DAY 1/1, DAY 1/16, DAY 1/2, day 1/1, day 1/52, day 1/32";
        String [] list=data.split(",");
        List<String> llist=new ArrayList<>();
        for (String string : list) {
            llist.add(string);
        }
        Collections.sort(llist,new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {

                if(o1.contains("DAY 1/") && o2.contains("DAY 1/")){
                    String s1=o1.split("/")[1];
                    String s2=o2.split("/")[1];
                   return Integer.parseInt(s1)>Integer.parseInt(s2)?1:-1;
                }else{
                    return o1.trim().compareTo(o2.trim());
                }

            }


        });

        System.out.println(llist);
}

输出:

[ABC,  DAY 1/1,  DAY 1/2,   DAY 1/2,  DAY 1/16,  XYZ,  day 1/1,  day 1/32,  day 1/52,  xyz]

【讨论】:

  • 非常感谢。有效。唯一的问题是我在 if 中应用了相同的条件,在 else if 中小写单词“day”。因为只有一个大写的 IF 只对大写单词进行排序。
猜你喜欢
  • 2012-06-08
  • 1970-01-01
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 2021-02-01
  • 1970-01-01
  • 2012-12-04
相关资源
最近更新 更多