我正在使用Java7和SmartGWT 3.1。我遇到以下代码,这些值不会按照我放入的顺序显示。
LinkedHashMap<Integer, String> insertOrdered = new LinkedHashMap<Integer, String>();
for (MyEnum me : MyEnum.values()) {
insertOrdered.put(me.getId(), me.getMyName());
}
ComboBoxItem cbi = new ComboBoxItem();
cbi.setValueMap(insertOrdered);
ID不是有序的(既不是升序也不是降序)。但是,这应该不重要,因为如果我没有完全弄错,LinkedHashMap
关于插入的命令。为了确保我再次检查了JavaDoc(http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html),情况确实如此。
为什么ComboBoxItem
无视我的订购?有没有其他方法可以在ComboBoxItem
中实现排序?
答案 0 :(得分:2)
LinkedHashMap的Javadoc声明:
此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。
尽管如此,我同意他们出现的顺序应该是JLS所述的在枚举中声明的顺序。如果您遇到LinkedHashMap问题,那么您确实希望确保此订单,也许您可能想尝试使用variable argument list method设置值。您实际上将它更改为一个数组,它可能是不受欢迎的,但它可能会解决您的问题。
List<String> list = new ArrayList<String>();
for(MyEnum me: MyEnum.values()){
list.add(me.getMyName());
}
ComboBoxItem cbi = new ComboBoxItem();
cbi.setValueMap(list.toArray(new String[list.size()]));
答案 1 :(得分:0)
我建议您检查一下是否在代码中的某处设置了setSortField。如果您设置以下内容:
setSortField("null");
在 ComboBoxItem 上,它将删除您可能拥有的任何排序,并将保留支持LinkedHashMap的排序顺序。
答案 2 :(得分:0)
将此操作用于ComboxItem
ComboxItem cb = new ComboxItem();
cb.setSortField(SortDirection.ASCENDING.compareTo(SortDirection.ASCENDING));