Найти все совпадения в коллекции Java - PullRequest
0 голосов
/ 16 сентября 2009

Хорошо. Здесь проблема. Это моя коллекция: {2,3,4,2,3,5}. Давайте предположим, что это List на данный момент. Я хотел бы найти в этой коллекции все совпадения '2'. Я хотел бы индексы того же. Я знаю, что есть indexOf() и lastIndexOf() методы в List и Arrays.binarySearch(). Однако все они возвращают один элемент, указывающий положение искомого элемента. Есть ли простой и эффективный способ найти все совпадения? Обратите внимание, что этот вопрос не ограничивается примитивными типами.

Ответы [ 7 ]

5 голосов
/ 16 сентября 2009

Нельзя выполнить двоичный поиск, если список не отсортирован. Если он отсортирован, то все соответствующие элементы находятся между indexOf и lastIndexOf.

3 голосов
/ 16 сентября 2009

Попробуйте Apache CollectionUtil метод класса countMatches

3 голосов
/ 16 сентября 2009

Если вы хотите, чтобы все матчи были, самый прямой путь - пройти через него

Простота - лучшая стратегия.

Или у вас есть какая-то особая причина не проходить через это?

3 голосов
/ 16 сентября 2009

Итерация по коллекции и проверка каждого элемента вручную.

1 голос
/ 16 сентября 2009

Используйте LambdaJ, и у вас будет система, похожая на закрытие, для написания вашего дела.

1 голос
/ 16 сентября 2009

Почему вы хотите найти индексы? Если возможно, рассмотрите возможность использования чего-либо, кроме списка, например, хеш-таблицы, которая допускает дублирование или отсортированный список, чтобы сократить время поиска. В противном случае единственный способ получить все экземпляры этого целого числа - выполнить поиск вручную с помощью цикла for.

0 голосов
/ 16 сентября 2009

Ознакомьтесь с библиотекой функционального программирования Bolts . Вы можете сделать фильтрацию с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...