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 我应该如何根据ArrayList中包含的一些整数对其进行排序?_Java_Sorting_Arraylist - Fatal编程技术网

Java 我应该如何根据ArrayList中包含的一些整数对其进行排序?

Java 我应该如何根据ArrayList中包含的一些整数对其进行排序?,java,sorting,arraylist,Java,Sorting,Arraylist,这显然不是我的作品,而是一个例子。 我已经在使用Comparable、compareTo、compare、Collections、sort等方面工作了两个多小时。 这并不涉及对附加到它们的字符串进行排序,但是第一个数字应该与其各自的单词保持一致。ArrayList必须保持完整,但我已经用尽了我所知道的所有其他可能性 6 Worda 8 Wordb 7 Wordc 20 Wordd 2 Worde 5 Wordf 1 Wordg 10

这显然不是我的作品,而是一个例子。 我已经在使用Comparable、compareTo、compare、Collections、sort等方面工作了两个多小时。 这并不涉及对附加到它们的字符串进行排序,但是第一个数字应该与其各自的单词保持一致。ArrayList必须保持完整,但我已经用尽了我所知道的所有其他可能性

    6 Worda
    8 Wordb
    7 Wordc
    20 Wordd
    2 Worde
    5 Wordf
    1 Wordg
    10 Wordh
    1 Wordi
    2 Wordj
新的ArrayList类似于:

    1 Wordi
    1 Wordg
    2 Wordj
    2 Worde
    5 Wordf
    6 Worda
    8 Wordb
    7 Wordc
    10 Wordh
    20 Wordd
  • 创建一个包含字段的类来保存每一行的信息(这里是一个int和一个String)
  • 使班级与自己相比较。例如,如果该类被称为MyClass,则让它实现
    Comparable
  • 给它一个像样的
    比较(…)
    方法
  • 在这种方法中,您应该首先按数字字段排序,如果数字不相等,则返回一个值
  • 然后是字符串秒(如果两个数字相等)

  • 你说,

    这显然不是我的作品,但它的一个例子

    如果您需要更具体的帮助,请考虑发布您的实际代码和它应该保存的实际数据。


    编辑您发布的内容:

    public int compareTo(Team o) { 
       if (this.apps >= o.apps) { 
         return this.apps; 
       } else { 
         return o.apps; 
       } 
    } 
    
    如果可以的话,请解释一下


    比如说

    // assuming Team has an int field, score and a String field, name
    public int compareTo(Team o) { 
      if (Integer.compare(score, o.score) != 0) {
        // the scores are not the same, so return the comparison
        return Integer.compare(score, o.score)
      } else {
        // the scores are the same, so compare the Strings:
        return name.compareTo(o.name);
      } 
    } 
    
  • 创建一个包含字段的类来保存每一行的信息(这里是一个int和一个String)
  • 使班级与自己相比较。例如,如果该类被称为MyClass,则让它实现
    Comparable
  • 给它一个像样的
    比较(…)
    方法
  • 在这种方法中,您应该首先按数字字段排序,如果数字不相等,则返回一个值
  • 然后是字符串秒(如果两个数字相等)

  • 你说,

    这显然不是我的作品,但它的一个例子

    如果您需要更具体的帮助,请考虑发布您的实际代码和它应该保存的实际数据。


    编辑您发布的内容:

    public int compareTo(Team o) { 
       if (this.apps >= o.apps) { 
         return this.apps; 
       } else { 
         return o.apps; 
       } 
    } 
    
    如果可以的话,请解释一下


    比如说

    // assuming Team has an int field, score and a String field, name
    public int compareTo(Team o) { 
      if (Integer.compare(score, o.score) != 0) {
        // the scores are not the same, so return the comparison
        return Integer.compare(score, o.score)
      } else {
        // the scores are the same, so compare the Strings:
        return name.compareTo(o.name);
      } 
    } 
    

    除了@Hovercraft答案外,另一种排序方法是。而不是定义自然顺序(具有可比性) 创建自己的排序策略(使用Comparator)

    创建一个保存数据的类

    public class MyClass{
    
    private String s;
    private Integer id;
    public static final Comparator MY_COMPARATOR = new MyComparator();
    
    public MyClass(String s, Integer id){
        this.s=s;
        this.id=id;
    }
    
    @Override
    public String toString(){
      return "ID :"+id+" property: "+s;
    }
    
    //Add getter&setter if you need    
    
    //static nested class
    private static class MyComparator implements Comparator<MyClass>{
          @Override
          public int compareTo(MyClass c, MyClass c2){
               //check possible nullPointerException
               int result = c.id.compareTo(c2.id);
               if(result == 0){
                  return c.s.compareTo(c2.s);
               }
               return result;
          }
    
    }
    
    }
    
    公共类MyClass{
    私有字符串;
    私有整数id;
    公共静态最终比较器MY_Comparator=新的MyComparator();
    公共MyClass(字符串s,整数id){
    这个.s=s;
    这个.id=id;
    }
    @凌驾
    公共字符串toString(){
    返回“ID:+ID+”属性:+s;
    }
    //如果需要,添加getter和setter
    //静态嵌套类
    私有静态类MyComparator实现Comparator{
    @凌驾
    公共整数比较(MyClass c、MyClass c2){
    //检查可能的nullPointerException
    int result=c.id.compareTo(c2.id);
    如果(结果==0){
    返回c.s.compareTo(c2.s);
    }
    返回结果;
    }
    }
    }
    
    然后是客户端代码

    List<MyClass> list = new ArrayList<>();
     //add data to the list
    
     //print it before sort
     System.out.println(list); 
     Collections.sort(list,MyClass.MY_COMPARATOR);
     //print it after sorting
     System.out.println(list);
    
    List List=new ArrayList();
    //将数据添加到列表中
    //排序前打印它
    系统输出打印项次(列表);
    Collections.sort(list,MyClass.MY_COMPARATOR);
    //排序后打印
    系统输出打印项次(列表);
    
    除了@Hovercraft answer之外,另一种排序方法是。而不是定义自然顺序(具有可比性) 创建自己的排序策略(使用Comparator)

    创建一个保存数据的类

    public class MyClass{
    
    private String s;
    private Integer id;
    public static final Comparator MY_COMPARATOR = new MyComparator();
    
    public MyClass(String s, Integer id){
        this.s=s;
        this.id=id;
    }
    
    @Override
    public String toString(){
      return "ID :"+id+" property: "+s;
    }
    
    //Add getter&setter if you need    
    
    //static nested class
    private static class MyComparator implements Comparator<MyClass>{
          @Override
          public int compareTo(MyClass c, MyClass c2){
               //check possible nullPointerException
               int result = c.id.compareTo(c2.id);
               if(result == 0){
                  return c.s.compareTo(c2.s);
               }
               return result;
          }
    
    }
    
    }
    
    公共类MyClass{
    私有字符串;
    私有整数id;
    公共静态最终比较器MY_Comparator=新的MyComparator();
    公共MyClass(字符串s,整数id){
    这个.s=s;
    这个.id=id;
    }
    @凌驾
    公共字符串toString(){
    返回“ID:+ID+”属性:+s;
    }
    //如果需要,添加getter和setter
    //静态嵌套类
    私有静态类MyComparator实现Comparator{
    @凌驾
    公共整数比较(MyClass c、MyClass c2){
    //检查可能的nullPointerException
    int result=c.id.compareTo(c2.id);
    如果(结果==0){
    返回c.s.compareTo(c2.s);
    }
    返回结果;
    }
    }
    }
    
    然后是客户端代码

    List<MyClass> list = new ArrayList<>();
     //add data to the list
    
     //print it before sort
     System.out.println(list); 
     Collections.sort(list,MyClass.MY_COMPARATOR);
     //print it after sorting
     System.out.println(list);
    
    List List=new ArrayList();
    //将数据添加到列表中
    //排序前打印它
    系统输出打印项次(列表);
    Collections.sort(list,MyClass.MY_COMPARATOR);
    //排序后打印
    系统输出打印项次(列表);
    
    从您的示例中可以看出,您希望使用以下规则对每个元素进行排序:

  • 最低数目
  • 如果数字相等,则为最高的字符串(即降序排序)
  • 所以你的可比代码应该是(伪代码)

    如果(me(number)其他其他(单词))则我小于
    否则如果我(字)<其他(字),那么我就比你大
    否则我就等于别人
    
    从您的示例中可以看出,您希望使用以下规则对每个元素进行排序:

  • 最低数目
  • 如果数字相等,则为最高的字符串(即降序排序)
  • 所以你的可比代码应该是(伪代码)

    如果(me(number)其他其他(单词))则我小于
    否则如果我(字)<其他(字),那么我就比你大
    否则我就等于别人
    
    ArrayList包含什么?你能粘贴comparator/comparable接口代码吗..我一直在寻找一种实现正确的comparator接口的方法,因为我一直在使用并最终搜索的那些接口对于只包含整数或字符串的ArrayList是唯一的。我正在尝试按一些数字对ArrayList进行排序在字符串中,如果可能的话。
    ArrayList
    包含什么?你能粘贴比较器/可比接口代码吗..我一直在寻找一种实现正确比较器接口的方法,因为我一直在使用并最终搜索的那些接口对于只包含整数的ArrayList或只包含字符串的ArrayList来说是唯一的。我正在尝试这样做