繁体   English   中英

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

[英]How should I sort an ArrayList by some integers contained in it?

显然这不是我的工作,而是一个例子。 我已经使用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
  1. 创建一个带有字段的类来保存每一行的信息(这里是一个int和一个String),
  2. 使类与自身可比。 例如,如果该类称为MyClass,则使其实现Comparable<MyClass>
  3. 给它一个体面的compareTo(...)方法
  4. 在此方法中,应首先按数字字段排序,如果数字不相等,则返回一个值。
  5. 然后按String秒(如果两个数字相等)。

你说

显然这不是我的工作,而是一个例子。

如果您需要更多特定的帮助,请考虑发布您的实际代码以及应该保留的实际数据。


编辑您的帖子:

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答案以外,另一种排序方式是。 无需定义自然排序 (使用Comparable),而是创建自己的排序策略(使用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;
      }

}

}

然后在客户端代码中

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);

从您的示例看来,您想要使用以下规则对每个元素进行排序:

  1. 最低人数
  2. 如果数字相等,则为最高字符串(即降序排列)

所以您的可比对象应该在其中,例如(伪代码)

if (me (number) < other (number) then me is less than
else if (me (number > other <number the me is greater than
else if (me (word) > other (word) then me is less than
else if (me (word) < other (word) then me is greater than
else me equals other

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM