2011-12-13 2 views
1

disons que j'ai une liste avec quelques éléments et je veux choisir tous ceux qui ne satisfont pas à certaines conditions. Je pensais à quelque chose comme ceci:Choisissez parmi un ensemble d'éléments, tous les éléments qui satisfont une condition

public void choose(Condition c) { 
    choose all elements that satisfy c.CheckCondition(elem) 
} 

cependant, je pense qu'il est très unelegant et les forces à l'utilisateur de mettre en œuvre un objet Condition avec une fonction qui vérifie si un élément satisfait à une condition. si c'était C++ j'aurais envoyé un pointeur sur une fonction en paramètre mais ce n'est pas possible en java. J'ai pensé à utiliser l'objet Comparable mais ce n'est pas bon car je dois l'implémenter dans ma classe au lieu de l'obtenir de l'utilisateur.

d'autres idées élégantes pour ce problème?

merci!

+0

Affichez http://stackoverflow.com/questions/122105/java-what-is-the -best-way-to-filter-a-collection. –

Répondre

0

Je pense que ce que vous proposez est assez élégant, surtout lorsqu'il est combiné avec les génériques et les classes anonymes:

set.choose(new Condition<Elem>() { 
    boolean checkCondition(Elem elem) { 
    ... 
    } 
}); 
2

Pas pour l'instant - Java 7 n'a toujours pas de fermetures ("pointeurs de fonction" en C). Il peut venir en Java 8. En attendant, nous sommes bloqués à écrire nos prédicats en tant que classes ...

Mais la bibliothèque de goyave pourrait vous intéresser. Il est développé par Google et fournit déjà des classes pour filtrer, mapper ou transformer les éléments d'une collection. http://code.google.com/p/guava-libraries/

Questions connexes