2012-03-02 6 views
0

J'ai un JList peopleList peuplé avec des objets de la personne classeTrouver des objets par propriété JList

class Person 
{ 
    private String name; 
    private String age; 

    private void setName(String value) 
    { 
    name = value; 
    } 

    private String getName() 
    { 
    return name; 
    } 
} 

actuel pour trouver une personne avec le nom que je fais

public boolean personByNameExists(String name) 
{ 
    for(int index = 0 ; index < peopleList .getModel().getSize() ; index ++) 
    { 
    Person pl = (Person) peopleList .getModel().getElementAt(index); 

    if(p1.getName().equals(name)) 
    { 
     return true; 
    } 
    } 
} 

Je me demande s'il y a façon de faire la même opération sans sortir de toute la liste. Je suis originaire de .Net et en C# j'utiliserais LINQ y at-il quelque chose de similaire en Java?

+0

duplication possible de [filtre et liste de tri en utilisant google collections] (http://stackoverflow.com/questions/2312849/filter-and-sort-list-using-google-collections) – haylem

Répondre

1

Vous recherchez une fonctionnalité filter typique.

Je vous recommande de regarder de Google goyave:

Vous pouvez trouver plus d'informations here ou même regarder ce SO question (votre question est un doublon):

Mise à jour: Comme kleopatra m'a fait réaliser, vous pourriez utiliser un ListModel normal.

Vous pouvez spécifier un modèle personnalisé lors de la création de votre JList, que ce soit:

  • implémente une collection ou d'une interface Iterable,
  • ou fournit une méthode pour retourner une vue des données filtrées par la propriété que vous vouloir.
+0

afaics, la question est à propos de Swing ListModel – kleopatra

+0

@kleopatra: darn, vous avez raison. Je m'étais trop habitué à avoir un adaptateur pour ça. – haylem

+0

Vous pouvez utiliser les méthodes ci-dessus si le modèle de votre 'JList' est soutenu par une' List', qui n'est pas extravagante – Robin

1

Cela dépend un peu du cas d'utilisation. Si vous voulez juste trouver une entrée sur le côté du modèle, vous pouvez continuer à boucler sur votre ListModel, ou faire une boucle sur la structure de données derrière le ListModel qui peut être une implémentation régulière List, et vous pouvez ensuite utiliser les méthodes suggérées par haylem. Si vous souhaitez effectuer une recherche sur votre JList, et présenter visuellement le résultat de la recherche à l'utilisateur (par exemple, mettez-le en surbrillance et faites défiler jusqu'à l'entrée correspondante). Je vous recommande vivement de jeter un coup d'œil sur le projet SwingX qui soutient cette de la boîte

Questions connexes