1

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?

Ola Ström
5,4496 gold badges31 silver badges50 bronze badges
asked Jun 21, 2011 at 15:35
1
  • what are you allowed to change? do you get a reference to the ArrayList and return the first match or do you have control over the inserting of the data in the list? Commented Jun 21, 2011 at 15:39

5 Answers 5

12

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.

answered Jun 21, 2011 at 15:38

2 Comments

Works for my purposes. Thanks! arrayList.toString()!
great i can use startswith as well
5

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).

answered Jun 21, 2011 at 15:41

1 Comment

java sample link is broken
2

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.

answered Jun 21, 2011 at 15:40

2 Comments

These methods use loops for you.
@Peter Lawrey: yes - it is only an way to reuse the compare logic (Predicate) -- Because I understand the question to search for other ways than the traditional for-each-if-check-return way.
1

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

answered Jun 21, 2011 at 15:40

Comments

0

You can use a NavigableSet

NavigableSet<String> set = new TreeSet<String>();
// add strings
String find =
String firstMatch = set.ceiling(find);
answered Jun 21, 2011 at 15:51

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.