2009-09-16 8 views
0

Ok. Voici un problème. Ceci est ma collection: {2,3,4,2,3,5}. Supposons que c'est un List pour l'instant. Je voudrais rechercher cette collection pour tous les matches de '2'. Je voudrais des index de la même chose. Je sais qu'il y a indexOf() et lastIndexOf() méthodes dans List et Arrays.binarySearch(). Cependant, tous retournent un élément indiquant la position de l'élément recherché. Existe-t-il un moyen simple et efficace de trouver tous les matches? Veuillez noter que cette question n'est pas limitée aux types primitifs. Effectuer une itération à travers la collection et vérifier tous les éléments manuellement.Trouver tous les résultats dans une collection Java

+0

P.S: Merci à tous pour vos réponses. Je pense que celui-ci fait ce que je veux: http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html#select(java.util.Collection, org.apache.commons.collections .Predicate) – Jay

+0

Si le lien ci-dessus est cassé, recherchez la méthode choisie ici http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html – Jay

Répondre

5

Vous ne pouvez pas binarySearch sauf si la liste est triée. S'il est trié, tous les éléments correspondants sont entre indexOf et lastIndexOf.

3

+0

Ceci, vraiment. Vous pouvez aller et faire une méthode pour simplifier les choses, mais votre meilleur pari pour ce que je crois que vous voulez sera de créer un tableau, faire une boucle dans votre collection passée, et ajouter des résultats correspondants à votre tableau créé, puis retourner il. – Eric

3

Si vous voulez toutes les correspondances, la manière la plus simple est de la faire défiler.

La simplicité est la meilleure stratégie.

Ou vous avez une raison particulière de ne pas le boucler?

+0

Je pense que ce ne serait pas une approche optimale du problème. Trop d'itérations, trop de temps processeur. – Jay

+2

Mais si vous ne trier la collection à l'avance, la recherche binaire ne ferait pas beaucoup d'aide non plus. Si vous utilisez une certaine structure de données, comme une arborescence binaire, la même question aurait des solutions différentes. La collection est trop générale. Vous pouvez donc choisir la bonne structure de données en fonction de vos besoins. –

+0

Existe-t-il une API tierce offrant ce type de fonctionnalités? Apache Commons? Google Collections? – Jay

1

Pourquoi voulez-vous trouver les index? Si possible, envisagez d'utiliser autre chose qu'une liste, comme une table de hachage qui autorise les doublons ou une liste triée afin de réduire votre temps de recherche. Sinon, la seule façon d'obtenir toutes les instances de cet entier est de rechercher manuellement en utilisant une boucle for.

1

Utilisez LambdaJ et vous aurez un système de fermeture pour écrire votre étui.

Questions connexes