[英]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
Comparable<MyClass>
compareTo(...)
方法 你说
显然这不是我的工作,而是一个例子。
如果您需要更多特定的帮助,请考虑发布您的实际代码以及应该保留的实际数据。
编辑您的帖子:
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);
从您的示例看来,您想要使用以下规则对每个元素进行排序:
所以您的可比对象应该在其中,例如(伪代码)
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.