Проверьте, содержит ли ArrayList <String>часть строки - PullRequest
0 голосов
/ 21 июня 2011

Скажите, у меня есть ArrayList:

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

и я хочу вернуть первый элемент arrayList, когда я говорю arrayList.containsSubString ('string1'); Как это можно сделать, кроме как перебирать каждый из элементов arrayList и проверять, является ли string1 подстрокой строки этого элемента?

Ответы [ 5 ]

12 голосов
/ 21 июня 2011

Единственное, о чем я могу думать, это делать что-то вроде:

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

Не знаю, считается ли это хорошей практикой.

5 голосов
/ 21 июня 2011

С ArrayList нет другого варианта, кроме как перебирать его.Но вы можете использовать другие структуры данных, такие как дерево префиксов (например, троичное дерево поиска , см. Этот образец Java ).

1 голос
/ 21 июня 2011

Я думаю, что итерация по списку и проверка каждого элемента - самый быстрый способ. И это также способ, которым каждый понимает ваш код. (кроме построения собственной структуры данных).


В любом случае вы также можете использовать org.apache.commons.collections.CollectionUtils#find(Collection, Predicate)

find(java.util.Collection collection, Predicate predicate) Находит первое элемент в данной коллекции, который соответствует данному предикату.

1 голос
/ 21 июня 2011

Не могу.Даже если был эквивалент List.contains (), он просто выполняет линейный поиск.

0 голосов
/ 21 июня 2011

Вы можете использовать NavigableSet

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

String find =
String firstMatch = set.ceiling(find);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...