gpt4 book ai didi

java - 将 List 上的值与其他 List 进行比较,并在不知道索引的情况下更新其他值
转载 作者:太空宇宙 更新时间:2023-11-04 12:40:33 24 4
gpt4 key购买 nike

假设我有一个对象的 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/

24 4 0