gpt4 book ai didi

java - 迭代一个巨大的列表更好的替代方法

转载 作者:行者123 更新时间:2023-11-29 18:40:39 25 4
gpt4 key购买 nike

我有一个文本输入,用户可以在其中输入搜索词,我将这个搜索词拆分为一个字符串数组,使用这些搜索词搜索列表项的名称和描述。这是我的代码,但它在我的设备上运行速度非常慢。 (我仔细检查了缓慢是来自 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);

最佳答案

有一些简单的事情,例如:您正在为每个项目重复调用 toLowerCase()。您应该在该内部循环之前执行此操作一次!

但除此之外,除了(潜在的)使用多线程来并行处理数据的多个部分之外,剩下的不多了。但这对 CPU 速度较慢的小型设备没有帮助。

除此之外,其他解决方案需要退后一步:有时您必须设计完整的数据模型以支持对性能最关键的用例。如果上述计算经常发生,那么已经存储小写字符串可能会很有用,以避免稍后执行此操作的开销。

或者,您可能需要研究服务器端解决方案,其中大部分数据驻留在服务器上,并且您在所述服务器上应用全文搜索引擎来完成繁重的工作。

所以,很明显,有很多选择,你应该做什么取决于你的背景、要求和资源!

关于java - 迭代一个巨大的列表更好的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com