这显然不是我的工作,而是一个例子。 我已经工作了两个多小时,现在使用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
答案 0 :(得分:3)
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);
}
}
答案 1 :(得分:1)
除了@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);
答案 2 :(得分:0)
从您的示例中可以看出,您希望使用以下规则对每个元素进行排序:
所以你的可比性应该是(像伪代码)
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