Android java: 如何正确发送排序后的数据到listView?
Android java: How correct send sorted data to listView?
我以 Map 格式对数据进行排序,其中 Integer 是 System.currentTimeMillis()/1000 中的时间戳和 FindedUser class
Map<Integer, FindedUser> reverseSortedMap = new TreeMap<>(Collections.reverseOrder());
reverseSortedMap.putAll(addedUsersMap);
for (Map.Entry<Integer, FindedUser> entry : reverseSortedMap.entrySet()) {
FindedUser user = entry.getValue();
System.out.println(entry.getKey()+" "+entry.getValue());
helperMap.put(entry.getKey(), new FindedUser(user.getId(), user.getName(), user.getTimestamp()));
}
并得到正确的数据
1609093171 FindedUser{name='ccc', id='11', timestamp='1609093171'}
1609092871 FindedUser{name='bbb', id='10', timestamp='1609092871'}
1609092015 FindedUser{name='aaa', id='9', timestamp='1609092015'}
但是当我将它发送到 listView 时:
MyAdapterHash addedUsersAdapter = new MyAdapterHash(helperMap);
addedUsersListView.setAdapter(addedUsersAdapter);
addedUsersAdapter.notifyDataSetChanged();
结果排序不正确:
1609092015 FindedUser{name='aaa', id='9', timestamp='1609092015'}
1609093171 FindedUser{name='ccc', id='11', timestamp='1609093171'}
1609092871 FindedUser{name='bbb', id='10', timestamp='1609092871'}
问题出在哪里?
看起来 helperMap
的类型 HashMap
不维护插入顺序。
将 helperMap
的类型更改为 LinkedHashMap
,这将为您提供可预测的迭代顺序。
我以 Map
Map<Integer, FindedUser> reverseSortedMap = new TreeMap<>(Collections.reverseOrder());
reverseSortedMap.putAll(addedUsersMap);
for (Map.Entry<Integer, FindedUser> entry : reverseSortedMap.entrySet()) {
FindedUser user = entry.getValue();
System.out.println(entry.getKey()+" "+entry.getValue());
helperMap.put(entry.getKey(), new FindedUser(user.getId(), user.getName(), user.getTimestamp()));
}
并得到正确的数据
1609093171 FindedUser{name='ccc', id='11', timestamp='1609093171'}
1609092871 FindedUser{name='bbb', id='10', timestamp='1609092871'}
1609092015 FindedUser{name='aaa', id='9', timestamp='1609092015'}
但是当我将它发送到 listView 时:
MyAdapterHash addedUsersAdapter = new MyAdapterHash(helperMap);
addedUsersListView.setAdapter(addedUsersAdapter);
addedUsersAdapter.notifyDataSetChanged();
结果排序不正确:
1609092015 FindedUser{name='aaa', id='9', timestamp='1609092015'}
1609093171 FindedUser{name='ccc', id='11', timestamp='1609093171'}
1609092871 FindedUser{name='bbb', id='10', timestamp='1609092871'}
问题出在哪里?
看起来 helperMap
的类型 HashMap
不维护插入顺序。
将 helperMap
的类型更改为 LinkedHashMap
,这将为您提供可预测的迭代顺序。