Say I have开发者_StackOverflow an ArrayList:
<string1.4>
<string2.4>
<string3.4>
and I wish to return the the first element of the arrayList when I say 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 string?
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.
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).
Can't. Even if there was an equivalent of List.contains() it just does a linear search under the hood.
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.
You can use a NavigableSet
NavigableSet<String> set = new TreeSet<String>();
// add strings
String find =
String firstMatch = set.ceiling(find);
精彩评论