2014-12-19 50 views
0

我有一个java Set,我无法将其更改为TreeSet,但我可以将其复制。这是问题:Java设置 - 如何根据名称列表进行排序

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

我如何分类这些是塔,汽车,建筑,办公室,地下室的确切订单。当然不会有重复(它是一套)。

public class Places{ 

String label; 
int moreinfo; 
} 

所以可以想象我有10个地方与标签可以是任何塔,汽车,建筑,办公,对象地下室:我怎么能进行排序,这些在一组,以确保他们在的确切顺序“塔,车,建筑,办公室,地下室“?

+1

修改'Places'以实现'Comparable '。 –

回答

0

您可以使用地图定义顺序弦乐任意一组:

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

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

+0

PS当然,如果您使用Java 8,则可以使用lambda创建比较器 –

+0

谢谢@JeffreyBosboom,已修复。 –

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方法进行排序。

+0

创造性的答案,但我不能改变我的实施。标签是我的代码中的一个字符串。加一。 – j2emanue

相关问题