我是java的新手。我正在编写一个代码,根据它的第一个字母对给定的对进行排序。我正在使用Collections.sort()
对这些对进行排序,但不知何故它没有被排序。我无法弄清楚导致问题的原因。请检查以下代码。感谢。
package main.java.practice;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class StringChain {
public static void main(String[] args) {
List<Pair> arr = new ArrayList<>();
arr.add(new Pair('i', 'a'));
arr.add(new Pair('a', 'f'));
arr.add(new Pair('g', 'h'));
arr.add(new Pair('f', 'g'));
arr.add(new Pair('z', 'i'));
Collections.sort(arr, new Comparator<Pair>() {
@Override
public int compare(Pair o1, Pair o2) {
if (o1.a < o2.b) return 1;
else return 0;
}
});
// Expected output should be
// a f
// f g
// g h
// i a
// z i
for( Pair x : arr) {
System.out.println(x.a + " " + x.b);
}
// Actual output
// i a
// a f
// g h
// f g
// z i
}
}
class Pair {
char a;
char b;
Pair() {};
Pair(char a, char b) {
this.a = a;
this.b = b;
}
}
答案 0 :(得分:5)
您的比较方法实施错误。
试一试:
Collections.sort(arr, new Comparator<Pair>() {
@Override
public int compare(Pair o1, Pair o2) {
return Character.compare(o1.a, o2.b);
}
});
此外,如果您使用java 8,则可以按如下方式更新代码:
arr.sort((o1, o2) -> Character.compare(o1.a, o2.a));
答案 1 :(得分:1)
比较者应该返回1,-1,0
&#xA;&#xA; new Comparator&lt; Pair&gt;(){&#xA; @越权#XA; public int compare(Pair o1,Pair o2){&#xA; if(o1.a&lt; o2.b){return 1;}&#xA;否则if(o1.a&gt; o2.a){return -1}&#xA; else {return 0;}&#xA; }&#XA; 代码>
&#XA;
答案 2 :(得分:0)
您需要在可比较的实施中涵盖3个可能的选项:
when (o1.a < o2.a)
when (o1.a > o2.a)
when (o1.a = o2.a)
但你基本上省略了一个代码无法正常工作的原因