我在链表中的值为
TY12354d,sfasdf,asfasf,2.35123412E8
TY12354dsaf,asdffasd,asfasfafsd,12344.0
Pranish,pranishfilan,毒蛇,1234
ZXS,ASDF,ASFD,1234
UV,VR,VA,1234
万维网,DSF,ASDF,123
dsfgsdf,SD,SD,235
这些值由包含特定数据的逗号分隔。第一个是TY12354d,TY12345saf,Pranish等是id,第二个,即sfasdf,asdffasd,pranishfilan等都是名称。这些值在jtextfield中查看。我想让用户在点击&#34时根据id对数据进行排序;按ID排序"按钮,点击时按名称"按名称排序"按钮等。
答案 0 :(得分:2)
您必须编写自己的比较器,或重写结构。使用比较器,您只需使用Collections.sort
对列表进行排序。
在stackoverflow上实现比较器有很多线程,比如this one。它实际上相当简单。
对链表进行排序效率不高,所以如果你不使用Collections.sort
,它使用中间数组进行排序,我建议你将数据结构改为例如数组或ArrayList。或者,甚至更好:创建一个Class来表示您的数据并为该类定义比较器。
以下是比较器的示例:
import java.util.*;
class Test {
static class IDComparator implements Comparator<String> {
@Override
public int compare(String a, String b) {
return a.split(",")[0].compareToIgnoreCase(b.split(",")[0]);
}
}
public static void main(String[] args) {
LinkedList<String> ll = new LinkedList<String>();
ll.add("TY12354d,sfasdf,asfasf,2.35123412E8");
ll.add("TY12354dsaf,asdffasd,asfasfafsd,12344.0");
ll.add("Pranish,pranishfilan,viper,1234");
System.out.println("Before sorting on ID:\n");
for (String s : ll) {
System.out.println(s);
}
Collections.sort(ll,new IDComparator());
System.out.println("\nAfter sorting on ID:\n");
for (String s : ll) {
System.out.println(s);
}
}
}
输出:
Before sorting on ID: TY12354d,sfasdf,asfasf,2.35123412E8 TY12354dsaf,asdffasd,asfasfafsd,12344.0 Pranish,pranishfilan,viper,1234 After sorting on ID: Pranish,pranishfilan,viper,1234 TY12354d,sfasdf,asfasf,2.35123412E8 TY12354dsaf,asdffasd,asfasfafsd,12344.0
这不是我写过的最漂亮的代码。我特别不喜欢比较器本身,带有硬编码索引。但是,它会让您了解如何使用自定义比较器。
答案 1 :(得分:1)
请尝试按ID进行排序。
LinkedList<String> list = new LinkedList<String>();
list.add("TY12354d,sfasdf,asfasf,2.35123412E8");
list.add("TY12354dsaf,asdffasd,asfasfafsd,12344.0");
list.add("Pranish,pranishfilan,viper,1234");
list.add("zxs,asdf,asfd,1234");
list.add("uv,vr,va,1234");
list.add("www,dsf,ASDF,123");
list.add("dsfgsdf,sd,sd,235");
Collections.sort(list, new Comparator<String>() {
public int compare(String a, String b) {
System.out.println(a+" --> "+b);
return a.substring(0, a.indexOf(',')).compareTo(b.substring(0, b.indexOf(',')));
}
});
也为名称使用相同的概念。
输出:
Pranish,pranishfilan,viper,1234
TY12354d,sfasdf,asfasf,2.35123412E8
TY12354dsaf,asdffasd,asfasfafsd,12344.0
dsfgsdf,sd,sd,235
uv,vr,va,1234
www,dsf,ASDF,123
zxs,asdf,asfd,1234
- 编辑 -
根据OP在Car
对象
class Car {
String id;
String name;
public Car(String id, String name) {
this.id = id;
this.name = name;
}
// getter & setter
}
LinkedList<Car> list = new LinkedList<Car>();
list.add(new Car("TY12354d", "sfasdf"));
list.add(new Car("TY12354dsaf", "asdffasd"));
list.add(new Car("Pranish", "pranishfilan"));
list.add(new Car("zxs", "asdf"));
list.add(new Car("uv", "vr"));
list.add(new Car("www", "dsf"));
list.add(new Car("dsfgsdf", "sd"));
Collections.sort(list, new Comparator<Car>() {
public int compare(Car c1, Car c2) {
return c1.id.compareTo(c2.id);
}
});