java - 将 List<Object> 上的值与其他 List 进行比较,并在不知道索引的情况下更新其他值

标签 java android sorting arraylist compare

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

相关文章:

android - 在flutter中单击+按钮时如何滚动?

python - Pandas 数据框中的自定义数据排序

algorithm - 排序数组的相对质量

r - 根据 colname 列表排序

java - 迭代 XML 树并从中提取数据的简单方法?

android - 缺少应用程序崩溃的 crashlytics 报告。什么时候应该调用 Crashlytics.start()?

java - 在 Selenium 中每个元素使用多个定位器的优缺点?

Android TextToSpeech,设置性别?

java - rxjava : emitting one result of all observables instead of multiple

Java jar 符号信息 : what is the equivalent of tdstrip?