2010-03-31 8 views
1

J'ai un HashSet contenant tous les groupes que j'ai récupérés de ma base de données. On m'a demandé de filtrer ce résultat en supprimant deux groupes spécifiques. Cela semble trivial mais je n'arrive pas à trouver une solution solide pour stocker les groupes spécifiques que je veux filtrer.Filtrer des objets spécifiques à partir d'une requête de recherche dans Alfresco en utilisant Java

Mon idée est de simplement créer un tableau contenant des références aux deux groupes dont j'ai besoin de filtrer. Je peux ensuite filtrer ma requête de recherche avec tout ce qui est dans le tableau. Ce qui me préoccupe, c'est qu'à l'avenir, ils pourraient demander de filtrer davantage de groupes et peut-être qu'un tableau n'est peut-être pas une bonne idée.

//Creates the array containing groups to filter out 

String[] hiddenGroups = {"group1","group2"}; 
//retrieves all groups 
Set<String>allGroups = new HashSet<String>(); 
allGroups.addAll(authorityService.getAllAuthorities(AuthorityType.GROUP); 
List<String>results = new ArrayList<String>(); 

//filters out specified groups 
for (String group : allGroups) { 
    boolean isHidden = false; 
    for (String hiddenGroup : hiddenGroups) { 
    if (hiddenGroup.equalsIgnorecase(group)) { 
     isHidden = true; 
    } 
    } 
    if (!isHidden){ 
    results.add(group); 
    } 
} 

Répondre

1

La recherche d'éléments dans un HashSet peut être effectuée en temps constant. Pour cette raison, vous pouvez rendre votre code plus efficace en ne faisant pas de boucle sur les éléments du HashSet et en travaillant à partir de l'ensemble complet et en supprimant les chaînes car vous trouvez qu'elles sont contenues dans l'ensemble complet.

//Creates the array containing groups to filter out 

String[] hiddenGroups = {"group1","group2"}; 

//retrieves all groups 
Set<String>allGroups = new HashSet<String>(); 
allGroups.addAll(authorityService.getAllAuthorities(AuthorityType.GROUP); 
Set<String>results = allGroups.clone(); 

//filters out specified groups 
for (String group : hiddenGroups) { 
    if (allGroups.contains(group)) { 
    results.remove(group); 
    } 
} 

Ce sera rapide même s'il y a un grand nombre de groupes puisque chacun est recherché en temps constant.

+0

HI Bialecki, Merci de m'avoir aidé à optimiser mon code. Je ne savais pas que Hashset avait ces capacités. Une chose que je veux ajouter, cependant, est que l'utilisation d'une boucle for que j'ai trouvée ci-dessus a donné une exception de modification simultanée. Pour résoudre ce problème, je viens de créer un itérateur et de l'utiliser pour parcourir l'ensemble. – Snowright