我正在开发一个 GWT(Google Web Toolkit)项目。我正在构建一个包含一系列列表框的“表单”。每个 ListBox 对应一个不同的 JSONArray,其中包含 JSONObjects。我希望每个 ListBox 在 JSONObjects 中保存一组排序的键/值对。我为每个 ListBox 一遍又一遍地重复相同的代码。我的问题是我可以参数化这个过程吗?
在我找到每个 JSONObject 的比较器之前,答案似乎很大程度上是“是”。Comparator 不带参数,我对 Java 的了解不够,不知道如何解决这个问题。可能吗?
private FlowPanel createWebUsersList(JSONArray Info, String listName) {
FlowPanel panel = new FlowPanel();
final ListBox listBox = new ListBox();
panel.add(new HTML("<h3>Limit by " + listName + "</h3>"));
listBox.setStyleName("LimitBy");
listBox.setName("limitBy" + listName);
listBox.setVisibleItemCount(20);
panel.add(listBox);
if (Info.size() > 0) {
SortedSet<JSONObject> sortedList = Collections
.synchronizedSortedSet(new TreeSet<JSONObject>(
new JSONObjectComparator(listName)));
for (int i = 0; i < Info.size(); i++) {
sortedList.add(Info.get(i).isObject());
}
while (sortedList.iterator().hasNext()) {
JSONObject item = sortedList.iterator().next();
listBox.addItem(
item.get("UserName").isString().stringValue(),
Integer.toString((int) item.get("ID").isNumber()
.doubleValue()));
}
} else {
Misc.displayError(logger,
"selectEMSEventsBy.addChangeHandler.onChange: empty WebUsers");
}
return panel;
}
class JSONObjectComparator implements Comparator<JSONObject> {
@Override
public int compare(JSONObject o1, JSONObject o2) {
return o1
.get("UserName")
.isString()
.stringValue()
.compareToIgnoreCase(
o2.get("UserName").isString().stringValue());
}
}