假设我有一个对象的 ArrayList,我们称之为 "Category"
( List<Category>
) 它有:
get/setName
get/setImportance
get/setImage
这些值来自网络服务(目前,get/setImportance始终为0,服务器没有此信息)...但是,通过这种方式,该服务有自己的排序(由于我需要的原因不起作用)。
用户将有机会在本地修改“重要性”并按这些重要性位置对其进行排序。
比方说:
-服务器响应名称:
*Name= Sports, Importance= 0
*Name= News, Importance= 0
*Name= Music, Importance= 0
*Name= Gaming, Importance= 0
-但是用户给出了重要性(新的本地列表将其保存在 SharedPreference 上):
*Name= Gaming, Importance= 1
*Name= News, Importance= 2
*Name= Sports, Importance= 3
*Name= Music, Importance= 4
我需要更新服务器信息(某些值每 3 小时更改一次),但我需要保持用户重要排序,因此,每次他/她打开应用程序时,他们都会进行自定义排序。
我需要将服务器上的 ArrayList 与 SharedPreference 上的本地列表(可以是 HashMap、列表,不关心)和“.set”进行比较,以通过比较两个列表的“名称”来更新原始 ArrayList 的值“重要性”。我不知道这两种情况下的索引。
最好的方法是什么?匹配时用于比较值的“for”?使用集合比较器?还有其他建议吗?
PS:最终排序列表应该保留一个列表,而不是一个 HashMap 或其他...整个应用程序使用这种架构,我将列表从一个 Activity 移到另一个 Activity,这就是为什么我需要“.set”来更新值(同样,我不知道索引)。
这是一个解决这个奇怪的长问题的土 bean 🍠
最佳答案
假设类别的 name
是唯一的,我会将信息存储为 HashMap:
HashMap<String, Category> map = HashMap<String, Category>();
for(Category c : response) { // assume response is List<Category>
map.put(c.getName(), c);
}
至于用户的偏好,我将存储为 List<String> userPreference;
包含用户订单中的类别名称。构建您的List<Category> categories;
你可以:
List<Category> categories = new ArrayList<>();
for(String name : userPreference) {
categories.add(map.get(name));
}
然后您将拥有 categories
具有正确排序的对象。
关于java - 将 List<Object> 上的值与其他 List 进行比较,并在不知道索引的情况下更新其他值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36873229/