1

我正在使用 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忽略我的订单?有没有其他方法可以在 a 中实现排序ComboBoxItem

4

3 回答 3

2

LinkedHashMap 的 Javadoc 指出:

此类不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

尽管如此,我同意它们出现的顺序应该是它们在枚举中声明的顺序,如JLS所述。如果您在使用 LinkedHashMap 时遇到问题,并且您确实想确保此顺序,也许您可​​能想尝试使用变量参数列表方法设置值。您实际上会将其更改为数组,这可能是不受欢迎的,但它可能会解决您的问题。

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()]));
于 2013-05-28T18:50:43.357 回答
0

I suggest you check if you are setting setSortField somewhere in your code. If you set the following:

 setSortField("null");

on the ComboBoxItem it will remove any sorting you may have and will keep the sort order of the backing LinkedHashMap.

于 2014-01-27T16:13:25.610 回答
0

使用此操作ComboxItem

ComboxItem cb = new ComboxItem();
cb.setSortField(SortDirection.ASCENDING.compareTo(SortDirection.ASCENDING));
于 2016-07-27T13:52:27.100 回答