Ete*_*oob 1 java sorting vector
对于像这样的给定矢量,
Vector<Temp> s = new Vector<Temp>();
s.add(new Temp("a",1));
s.add(new Temp("b",2));
s.add(new Temp("c",3));
s.add(new Temp("b",4));
s.add(new Temp("b",6));
s.add(new Temp("c",5));
Run Code Online (Sandbox Code Playgroud)
期望的测序(b,a,c)
排序后,应该是这样的
b,2
b,4
b,6
a,1
c,3
c,5
Run Code Online (Sandbox Code Playgroud)
我知道如何使用比较器根据一个字段对对象进行排序,但这里的问题不同,所需的序列也各不相同,我每次都必须根据该序列进行排序.
有任何想法吗?
您应该编写一个自定义比较器,将序列作为参数,并相应地比较元素.
这是一个示例实现:
public class Test {
public static void main(String[] args) {
Vector<Temp> s = new Vector<Temp>();
s.add(new Temp("a",1));
s.add(new Temp("b",2));
s.add(new Temp("c",3));
s.add(new Temp("b",4));
s.add(new Temp("b",6));
s.add(new Temp("c",5));
String[] seq = { "b", "a", "c" };
Collections.sort(s, new CustomComparator(seq));
for (Temp tmp : s)
System.out.println(tmp);
}
static class CustomComparator implements Comparator<Temp> {
List<String> sequence;
CustomComparator(String[] seq) {
sequence = Arrays.asList(seq);
}
public int compare(Temp t1, Temp t2) {
if (t1.s.equals(t2.s))
return ((Integer) t1.i).compareTo(t2.i);
return sequence.indexOf(t1.s) - sequence.indexOf(t2.s);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出: (ideone.com演示)
(b, 2)
(b, 4)
(b, 6)
(a, 1)
(c, 3)
(c, 5)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
760 次 |
最近记录: |