我是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)
但你基本上省略了一个代码无法正常工作的原因
相关问题
最新问题
-
我写了这段代码,但我无法理解我的错误
-
我无法从一个代码实例的列表中删除 None 值,但我可以在另一个实例中。为什么它适用于一个细分市场而不适用于另一个细分市场?
-
是否有可能使 loadstring 不可能等于打印?卢阿
-
java中的random.expovariate()
-
Appscript 通过会议在 Google 日历中发送电子邮件和创建活动
-
为什么我的 Onclick 箭头功能在 React 中不起作用?
-
在此代码中是否有使用“this”的替代方法?
-
在 SQL Server 和 PostgreSQL 上查询,我如何从第一个表获得第二个表的可视化
-
每千个数字得到
-
更新了城市边界 KML 文件的来源?