Searching for a String in an ArrayList

1. Basic Looping

First, let’s use a basic loop to search the sequence of characters in the given search string using the contains method of Java’s String class:

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;
}

2. Streams

The Java 8 Streams API provides us with a more compact solution by using functional operations.

First, we’ll use the filter() method to search our input list for the search string, and then, we’ll use the collect method to create and populate a list containing the matching elements:

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;
}

3. Third-Party Libraries

If we cannot use the Java 8 Stream API, we can look at third-party libraries such as Commons Collections and Google Guava.

To use them, we just need to add Guava, Commons Collections, or both dependencies in our pom.xml file:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>
 
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.1</version>
</dependency>

3.1. Commons Collections

Commons Collections provides us with a method IterableUtils.filteredIterable() that matches the given Iterable against a Predicate.

Let’s call IterableUtils.filteredIterable(), defining the predicate to select only those elements containing the search string. Then, we’ll use IteratorUtils.toList() to convert the Iterable to a 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());
}

3.2. Google Guava

Google Guava offers a similar solution to Apache’s filteredIterable() with the Iterables.filter() method. Let’s use it to filter the list and return only the elements matching our search string:

public List<String> findUsingGuava(String search, List<String> list) {         
    Iterable<String> result = Iterables.filter(list, Predicates.containsPattern(search));
 
    return Lists.newArrayList(result.iterator());
}

4. Conclusion

In this tutorial, we’ve learned different ways of searching for a String in an ArrayList. We first started with a simple for loop and then proceeded with an approach using the Stream API. Finally, we saw some examples using two third-party libraries — Google Guava and Commons Collections_._

The complete examples are available over on GitHub.

#java #string #arrays

Searching for a String in an ArrayList
37.10 GEEK