Java Set - 如何基于名称列表进行排序

时间:2014-12-19 22:59:19

标签: java sorting collections set

我有一个java Set但我无法将其更改为TreeSet,但我可以复制它。这是问题所在:

我有名字,塔,汽车,建筑物,办公室,地下室。我有一个POJO,它有一个字符串标签变量,包含每个实例中的一个。

我怎样才能将这些分类为塔楼,汽车,建筑物,办公室,地下室的精确顺序。当然不会有重复(一套)。

public class Places{

String label;
int moreinfo;
}

所以想象一下,我有10个Place对象,其标签可以是塔,汽车,建筑物,办公室,地下室中的任何一个:我如何在一组中对它们进行排序,以确保它们符合"塔的确切顺序,汽车,建筑,办公室,地下室" ?

2 个答案:

答案 0 :(得分:1)

你可以转换字段'标签'进入enum,其中枚举值按自定义顺序排序。

public enum Label {
    TOWER, CAR, BUILDING, OFFICE, BASEMENT
}

然后,您可以实现可比较的顺序来对集合进行排序。

class Places implements Comparable<Places>{

    Label label;
    int moreinfo;
    @Override
    public int compareTo(Places o) {
        return label.compareTo(o.label);
    }   
}

然后,您可以使用Collections.sort方法进行排序。

答案 1 :(得分:0)

您可以使用Map定义任意字符串集的顺序:

private static Map<String, Integer> ordering;
static {
    ordering = new HashMap<>();
    ordering.add("tower", 1);
    ordering.add("car", 2");
    ...add your other strings with increasing values...
}

Collections.sort(yourCollection, new Comparator<Places>() {
    public int compare(Places p1, Places p2) {
        return ordering.get(p1.label) - ordering.get(p2.label);
    }
});

但是要小心......你不能对Set进行排序。如果它是一个SortedSet(如TreeSet),它将自行排序,如果不是它没有定义的顺序。