1 つのリストの順序が他のリストの順序と異なる 2 つのリストがあります。リストに、両方のリストでキーの順序が異なるマップを追加しています。両方のリストの順序を同じにしたい。どうすればこれを実行できますか?
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
回答によると、編集された以下のコード: ここではデータがコピーされ、並べ替えだけが必要ですが、リストのサイズが異なります.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 のキーは 1,2,3,4 で、古い値は 1,3,2 です。ハプニング