ArrayListで文字列を検索する
1. 概要
このチュートリアルでは、ArrayListで文字列を検索するさまざまな方法を調べます。 私たちの目的は、 ArrayList の要素のいずれかに特定の空でない文字シーケンスが存在するかどうかを確認し、一致するすべての要素を含むリストを返すことです。
2. 基本的なループ
まず、基本的なループを使用して、JavaのStringクラスのcontainsメソッドを使用して、指定された検索文字列内の文字のシーケンスを検索しましょう。
public List<String> findUsingLoop(String search, List<String> list) {
List<String> matches = new ArrayList<String>();
for(String str: list) {
if (str.contains(search)) {
matches.add(str);
}
}
return matches;
}
3. ストリーム
Java 8 Streams API は、機能操作を使用することにより、よりコンパクトなソリューションを提供します。
まず、 filter()メソッドを使用して入力リストで検索文字列を検索し、次に collect メソッドを使用して、一致する要素:
public List<String> findUsingStream(String search, List<String> list) {
List<String> matchingElements = list.stream()
.filter(str -> str.trim().contains(search))
.collect(Collectors.toList());
return matchingElements;
}
4. サードパーティのライブラリ
Java 8 Stream APIを使用できない場合は、CommonsCollectionsやGoogleGuavaなどのサードパーティライブラリを調べることができます。
それらを使用するには、pom.xmlファイルに Guava 、 Commons Collections 、または両方の依存関係を追加する必要があります。
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.0.1-jre</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>4.1</version>
</dependency>
4.1. CommonsCollections
Commons Collectionsは、指定された IterableをPredicateと照合するメソッドIterableUtils.filteredIterable()を提供します。
IterableUtils.filteredIterable()を呼び出して、検索文字列を含む要素のみを選択する述語を定義しましょう。 次に、 IteratorUtils.toList()を使用して、IterableをListに変換します。
public List<String> findUsingCommonsCollection(String search, List<String> list) {
Iterable<String> result = IterableUtils.filteredIterable(list, new Predicate<String>() {
public boolean evaluate(String listElement) {
return listElement.contains(search);
}
});
return IteratorUtils.toList(result.iterator());
}
4.2. Google Guava
Google Guavaは、 Iterables.filter()メソッドを使用して、Apacheの filteredIterable()と同様のソリューションを提供します。 これを使用してリストをフィルタリングし、検索文字列に一致する要素のみを返します。
public List<String> findUsingGuava(String search, List<String> list) {
Iterable<String> result = Iterables.filter(list, Predicates.containsPattern(search));
return Lists.newArrayList(result.iterator());
}
5. 結論
このチュートリアルでは、さまざまな検索方法を学びました。 弦で
完全な例は、GitHubでから入手できます。