[英]How to search a subString in a big list<String> - Java
我有一個很大的list<String>
,大約有50,000條記錄。 我想要一種有效的方法來搜索該List
的特定subString
並獲取包含該subString
的Strings
。
到目前為止,我的代碼是這樣的:
List<String> result = new ArrayList<>();
if (aCondition) {
for (String file : arg) {
if (file.toLowerCase().contains(tag.toLowerCase())) {
result.add(file);
}
}
}
return result;
這取決於您所說的有效 。
如果要達到“最小” CPU使用率,那么您就無能為力了。 並比較所有條目。 唯一明顯的事情不做 :調用tag.toLowerCase()
每個循環體。 在進入循環之前,只需計算一次該值即可 !
如果您想在更短的時間內獲得結果,答案很簡單:使用多個線程,並讓每個線程搜索整個列表的“切片”(當然,這很快就會變得很復雜,因為您現在必須保留順序和其他細微的東西)。
最后:你可能要考慮的工具, ElasticSearch -因為我們有專門正是這樣做的各種產品:搜索文本的巨額資金。
考慮使用SQL數據庫保存大量數據。
這樣,您可以使用簡單的查詢來獲取包含子字符串的結果String(請參見下面的示例)。 此外,您的內存將沒有列表中加載的數據量。
例如
SELECT * from word_list_table WHERE word LIKE'%substring%'
如果您的處理器有多個內核,那就去使用並行流。
List<String> result = lines.parallelStream() //convert list to parallel stream
.filter(line -> file.toLowerCase().contains(tag.toLowerCase())) // check your condition
.collect(Collectors.toList()); // collect output
如果您的處理器具有多個內核,因為打開了並行流,則以上代碼將更快地處理您的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.