我有一个 ArrayList MyObjects
。该类MyObjects
有 10 多个属性,但我只需要从 4 个属性中进行搜索。用户将按下一个按钮并能够为 选择值property1
。假设用户将选择property1Value1
,property1Value2
和property1Value4
, 然后他将按下按钮并选择property2
值: property2Value1
, property2Value5
, property2Value7 等等。这些是filter1和filter2。和 对用户不可见,因为他使用 filter1 过滤掉了property2Value2
。就像在他进入新的过滤屏幕之前进行搜索一样。我需要将他在每个过滤器中选择的内容存储在某个地方,因为当他返回导航时,我必须向他显示所选值。property2Value3
property2Value4
我认为用图片更容易理解,因为在 ebay 上实现了类似的功能:
开始时没有过滤器:用户可以为每个属性选择所有值:
用户选择“平板电脑”作为类型属性。- 搜索完成,一些属性值不再可见:
选择第二个过滤器值:
按(自动)搜索我应该在 SQL 中执行以下操作:
SELECT * FROM MyObjects WHERE
( (property1 = property1Value1) || (property1 = property1Value2) || (property1 = property1Value4) )
AND
( (property2 = property2Value1) || (property2 = property2Value5) )
由于我在内存中有对象,我认为创建 sqlLite3 数据库不是一个好主意,写出来而不是选择。在 iOS 实现中,我做了非常复杂的缓存算法。缓存分离的过滤器值。大量的辅助索引持有者(最少 20 个),因为对于每个过滤器,我都需要做一些额外的事情,这里没有提到,并且数据只存储一次。
我害怕将该算法重写为 Android,iOS 上的算法一定很简单。
编辑:基本上我需要在 Java 对象搜索中重写 SQL 搜索。
Edit2:基于 Multimap 的回答。
这Multimap
并不比 a 好HashMap<String, <ArrarList<Integer>>
,其中键是属性 ( property2Value3
) 的值,而值是 my ArrayList<MyObjects>
(1,2,3,4,5...100)的索引列表
需要在每个过滤器上建立,每个过滤器值HashMap<String, <ArrarList<Integer>>
都比我所在的位置要好,iOS...可能少了一些辅助集合。
任何想法?