TookTheRook
TookTheRook

Reputation: 827

Check if ArrayList<String> contains part of a string in Java

Say I have an ArrayList:

<string1.4>
<string2.4>
<string3.4>

and I wish to return the first element of the ArrayList that contains "string1" as part of that element's string.
E.g.

arrayList.containsSubString('string1');  

How could this be done other than iterating through each of the elements of the ArrayList and checking if "string1" is a substring of that element's string?

Upvotes: 1

Views: 18385

Answers (5)

Peter Lawrey
Peter Lawrey

Reputation: 533880

You can use a NavigableSet

NavigableSet<String> set = new TreeSet<String>();
// add strings

String find =
String firstMatch = set.ceiling(find);

Upvotes: 0

morja
morja

Reputation: 8560

With an ArrayList there is no other option than iterating through it. But you could use other data structures like a prefix tree (e.g. a ternary search tree, see this java sample).

Upvotes: 5

Ralph
Ralph

Reputation: 120871

I think iterating though the list and checking each item is the fastest way. And it is also the way every one understand your code. (except of building your own data structure).


Anyway you can also use org.apache.commons.collections.CollectionUtils#find(Collection, Predicate)

find(java.util.Collection collection, Predicate predicate) Finds the first element in the given collection which matches the given predicate.

Upvotes: 2

jiggy
jiggy

Reputation: 3836

Can't. Even if there was an equivalent of List.contains() it just does a linear search under the hood.

Upvotes: 1

aioobe
aioobe

Reputation: 421310

The only way I can think of is doing something like:

strs.get(strs.indexOf(new Object() {
    @Override
    public boolean equals(Object obj) {
        return obj.toString().contains(s);
    }
}));

Don't know if it is considered good practice though.

Upvotes: 12

Related Questions