簡體   English   中英

如何在大列表中搜索subString <String> -Java

[英]How to search a subString in a big list<String> - Java

我有一個很大的list<String> ,大約有50,000條記錄。 我想要一種有效的方法來搜索該List的特定subString並獲取包含該subStringStrings

到目前為止,我的代碼是這樣的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM