- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在理解 RecyclerView
的 SortedList
时遇到一些问题。
假设我有一个非常简单的类,只有一个非常简单的类保存数据:
public class Pojo {
public final int id;
public final char aChar;
public Pojo(int id, char aChar) {
this.id = id;
this.aChar = aChar;
}
@Override
public String toString() {
return "Pojo[" + "id=" + id
+ ",aChar=" + aChar
+ "]";
}
}
我的理解是排序列表不会包含任何重复项。
但是当我有一个带有回调的 SortedList 时:
....
@Override
public boolean areContentsTheSame(Pojo oldItem, Pojo newItem) {
return oldItem.aChar == newItem.aChar;
}
@Override
public int compare(Pojo o1, Pojo o2) {
return Character.compare(o1.aChar, o2.aChar);
}
@Override
public boolean areItemsTheSame(Pojo item1, Pojo item2) {
return item1.id == item2.id;
}
当我添加具有相同 ID 但不同字符的多个项目时,我最终得到了重复项。
sortedList.add(new Pojo(1, 'a'));
sortedList.add(new Pojo(1, 'b'));
我希望列表能够更新项目。现在我有多个项目,即使 areItemsTheSame
返回 true
。
最佳答案
SortedList 不保留任何 id 映射(因为 API 中没有 id)。因此,当排序标准发生变化时(在您的情况下为 a 到 b),SortedList 无法找到现有元素。
您可以自己保留 id 映射,然后使用如下的添加方法:
void add(Item t) {
Item existing = idMap.get(t.id);
if (existing == null) {
sortedList.add(t);
} else {
sortedList.updateItemAt(sortedList.indexOf(existing), t);
}
idMap.put(t.id, t);
}
您还需要实现一个删除方法以从 idMap 中删除该项目。
关于java - Android:带有重复项的 SortedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31853678/
由于我使用的现有框架,方法调用返回一个 SortedList 对象。因为我写了这个调用的另一端,所以我知道它实际上是一个 SortedList。虽然我可以继续使用 SortedList,但使用泛型会更
我在 RecyclerView 中遇到 Android SortedList 的问题,主要是 remove 方法: public void replaceAll(List userFertList,
我想比较在 SortedList 中用作键的字节数组 public SortedList myList = new SortedList(); 问题是,我无法将条目添加到 myList 中,因为 .N
我想总结 SortedList 的某些值(时间范围从开始到结束)与林克。键包含工作日的日期,值包含给定日期可能的工作时间。我想回答的问题是,在给定的时间范围内有多少小时是可能的。 我设法计算了 key
可以SortedList取两个键并返回一个值? 我有 SortedList 类型的标准 但现在我需要传递两个键来找到值 SortedList . 这可能吗?如果没有,请告诉我其他一些解决方案,我构建了
我有降序排列的 SortedList。 public class MyComparer : IComparer { public int Compare(int x, int
我正在尝试将 SortedList 与不区分大小写的字符串比较结合使用。以下是工作: SortedList mySL = new SortedList(new CaseInsensitiveCompa
我正在开发一种算法,该算法在很大程度上依赖于某些列表中元素的顺序,但是,该列表需要允许重复和随机访问其元素(不使用迭代器)。我在java中搜索过这样的东西,但找到的选项总是缺少我提到的条件之一。 任何
其中一位使用我编写的协议(protocol)生成工具的人报告了一个我无法真正理解的错误: Failed to compare two elements in the array. 我使用 Sorted
看起来 SortedList 已被排除。您认为现有集合中最合适的是什么? (保持同样快速的访问和更改) silverlight字典可以永久排序吗? 最诚挚的问候VLK 最佳答案 我将 Wintelle
我最初有一些代码,简化后看起来像这样: var planets = new List { new Planet {Id = 1, Name = "Mercury"}, new Plan
不使用扩展方法 (LINQ)。不幸的是,我仅限于 .NET 2.0。 (是的,这很糟糕) 寻找接近 O(log(n)) 的东西。 感谢您的帮助。 最佳答案 要查找大于给定键的第一个键,您可以使用键列表
我的问题是枚举器从 SortedList 中删除项目是否安全? SortedList myDictionary; // omitted code IEnumerator enum = myDictio
我正在向排序列表中添加一些独特的法语单词,但它似乎无法区分某些单词,例如“bœuf”和 boeuf。 private static void TestSortedList() { Thread
有没有办法将 android.support.v7.util.SortedList 转换为 java.util.List? (或任何其他子类)我看到的唯一方法是遍历 SortedList 并将元素一个
我有这个对象: class Animation { //[...] private SortedList frames = new SortedList();
我在理解 RecyclerView 的 SortedList 时遇到一些问题。 假设我有一个非常简单的类,只有一个非常简单的类保存数据: public class Pojo { public
下面的代码遍历一个列表并获取值,但是我如何编写一个类似的语句来获取键和值 foreach (string value in list.Values) { Console.WriteLine(v
任何人都可以解释为什么这段代码: Dim Data As New SortedList(StringComparer.InvariantCultureIgnoreCase) Data.Add("AB"
有一个SortedList slLanguage = new SortedList(); slLanguage.Add("Bahasa","id-ID"); slLanguage.Add("Chine
我是一名优秀的程序员,十分优秀!