【发布时间】:2018-11-04 10:46:49
【问题描述】:
我有一个文本输入,用户在其中输入搜索词,我将此搜索词拆分为一个字符串数组,使用这些搜索词搜索列表项的名称和描述。这是我的代码,但它在我的设备上运行速度非常慢。 (我仔细检查了缓慢是来自for each 循环而不是RecyclerView)。任何人都可以建议我一个更好/更快替代方案的好例子吗?
ArrayList<CustomItem> original_list = getListFromDatabase();
ArrayList<CustomItem> filtered_list = new ArrayList<>();
String input_word = search_word.trim().toLowerCase(); // search_word is assigned by an input field
String[] parts = input_word.split(" ");
if (original_list != null) {
for (CustomItem item : original_list) {
int number = 0;
for (String part : parts) {
if (item.getName().toLowerCase().contains(part) || item.getDescription().toLowerCase().contains(part)) {
++number;
}
}
if (number == parts.length) filtered.add(item);
}
}
// lastly I assign my filtered list to a RecyclerView
if (adapter != null) adapter.search(filtered);
【问题讨论】:
-
缓慢来自
item.getName().toLowerCase()和item.getDescription().toLowerCase()的toLowerCase()。对于每次迭代,它需要在内存中生成一个新的小写字符串。想一些方法来避免这种情况。一种方法是保留小写列表。
标签: java android list for-loop