java - 根据给定序列对 vector 进行排序

标签 java sorting vector

对于这样一个给定的 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));

所需的顺序(b,a,c)

排序后应该是这样的

b,2  
b,4  
b,6  
a,1  
c,3  
c,5 

我知道如何使用比较器根据一个字段对对象进行排序,但这里的问题不同,所需的顺序各不相同,我每次都必须根据该顺序进行排序。

有什么想法吗?

最佳答案

您应该编写一个自定义比较器,将序列作为参数,并相应地比较元素。

这是一个示例实现:

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);
        }
    }
}

输出: (ideone.com demo)

(b, 2)
(b, 4)
(b, 6)
(a, 1)
(c, 3)
(c, 5)

关于java - 根据给定序列对 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147122/

相关文章:

python - 如何仅对 Pandas 数据框中的选定列进行排序

java - 如何在使用 Collat​​or 排序时避免忽略连字符

c++ - 使用类 vector 时会遇到内存泄漏吗? (C++)

C++ - 通过指针访问 vector 元素的安全性

java - 如何使用 ANT 将版本号添加到 WAR 文件

java - 文件输出不断覆盖?

java - 从容器外部的 shell 脚本调用基于 Spring 的应用程序

python - 将两个列表组合成一个新列表并排序

c++ - 在快速删除方面,C++ vector 有什么替代方案?

java - Spring MVC ajax 重新渲染用户界面重复