我有兩個列表,其中一個列表的順序與其他列表的順序不同,列表中我添加了一個映射,其中列表中的鍵順序不同。我想要這兩個列表的順序相同。我該如何執行此操作?基於另一個列表的順序排列列表
Map<Long, String> attfieldMap = null;
attfieldMap = view.getNameMap(form);
List<Field> auditMap = new ArrayList<Field>();
if (itemId != 0) {
Item dom = getRecord();
Map<FormField, Object> tempValues = dom.getValues();
List<Field> oldValues = new ArrayList<Field>();
for (Map.Entry<FormField, Object> values : tempValues
.entrySet()) {
Field oldFld = new Field();
Form form = (Form) values.getKey();
if (attfieldMap.get(form.getField().getId()) != null) {
oldFld.setKey(attfieldMap.get(form.getField()
.getId()));
oldFld.setValue(values.getValue());
oldValues.add(oldFld);
}
}
}
for (Map.Entry<Long, String> attfieldEntry : attfieldMap.entrySet()) {
// Mandates to declare within loop
Field attributeFld = new Field;
attributeFld.setKey(attfieldEntry.getValue());
attributeFld.setValue(String.valueOf(attfieldEntry.getKey()));
auditMap.add(attributeFld);
}
名單auditMap
有地圖與關鍵att13
,att12
,att14
和oldValues
具有地圖與關鍵att12
,att13
,att14
。我需要這個列表與auditMap
列表的順序相同。如何訂購?
根據answeres編輯下面的代碼:這裏數據被複制,即使列表大小不同,列表大小也不同.list1應該有自己的數據,list2應該有相同的數據,但順序應該是保持
List<Field> auditMap = new ArrayList<Field>();
attfieldMap = View
.getFieldID(form);
for (Map.Entry<Long, String> attfieldEntry : attfieldMap.entrySet()) {
Field attributeFld = new Field();
attributeFld.setKey(attfieldEntry.getValue());
attributeFld.setValue(String.valueOf(attfieldEntry.getKey()));
auditMap.add(attributeFld);
attributeFld = null;
}
if (itemId != 0) {
Item dom = getRecord(domainItem);
Map<FormField, Object> tempValues = dom.getValues();
List<Field> oldValues = new ArrayList<Field>();
for (Map.Entry<FormField, Object> values : tempValues
.entrySet()) {
Field oldFld = new Field();
Form form = (Form) values.getKey();
if (attfieldMap.get(form.getField().getId()) != null) {
oldFld.setKey(attfieldMap.get(form.getField()
.getId()));
oldFld.setValue(values.getValue());
oldValues.add(oldFld);
}
}
final Map<Field, Integer> indices = new HashMap<Field, Integer>();
for (int i = 0; i < oldValues.size(); i++) {
indices.put(oldValues.get(i), i);
}
Collections.sort(auditMap, new Comparator<Field>() {
public int compare(Field o1, Field o2) {
int index1 = indices.containsKey(o1) ? indices.get(o1)
: -1;
int index2 = indices.containsKey(o2) ? indices.get(o2)
: -1;
return index1 - index2;
}
});
for (int i = 0; i < oldValues.size(); i++) {
LOGGER.info("the new data is--" + oldValues.get(i).getKey());
}
for (int i = 0; i < auditMap.size(); i++) {
LOGGER.info("the new data is--" + auditMap.get(i).getKey());
}
這是我的實際代碼,數據是沒有得到在auditMap ordered.The鍵1,2,3,4和舊值是1,3,2舊值的結果應該是1,2,3但它沒有發生
AFAIU沒有辦法保證在條目集條目的順序。我懷疑你正在使用完全錯誤的數據結構來實現'相同的順序'。 –
這兩個列表中的數據都來自其他方法。 – pars
'列表auditMap包含映射關鍵字att13,att12,att14'您打算引用attfieldmap嗎? – Vikdor