aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.kt')
-rw-r--r--app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.kt35
1 files changed, 35 insertions, 0 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.kt b/app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.kt
new file mode 100644
index 00000000..53b1c824
--- /dev/null
+++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/OrderedCustomListAdapter.kt
@@ -0,0 +1,35 @@
+package net.lacolaco.smileessence.view.adapter
+
+import net.lacolaco.smileessence.entity.IdObject
+
+import java.util.*
+
+abstract class OrderedCustomListAdapter<T : IdObject>
+constructor(comparator: Comparator<Long> = Comparator { x, y -> java.lang.Long.compare(x, y) }) : CustomListAdapter<T>() {
+ private val treeMap: MutableMap<Long, T> = TreeMap(Collections.reverseOrder(comparator))
+
+ override val list: List<T>
+ @Synchronized get() = ArrayList(treeMap.values)
+
+ @Synchronized
+ fun add(item: T) {
+ treeMap.put(item.id, item)
+ }
+
+ @Synchronized
+ fun addAll(items: Collection<T>) {
+ for (item in items) {
+ treeMap.put(item.id, item)
+ }
+ }
+
+ @Synchronized
+ fun clear() {
+ treeMap.clear()
+ }
+
+ @Synchronized
+ fun remove(item: T): T {
+ return treeMap.remove(item.id)!!
+ }
+}