2009-04-10 8 views

Répondre

5

Vous pourriez aimer Quaere, qui est un langage de requête assez riche pour les graphes d'objets java:

Integer[] numbers={5, 4, 1, 3, 9, 8, 7, 2, 0}; 
Iterable<Integer> lowNumbers= 
    from("n").in(numbers). 
    where(lt("n",5). 
    select("n"); 
3

Oui et non.

Non, pas avec une syntaxe SQL.

Oui, avec un foncteur de filtre. En particulier, consultez la collection Apaches Commons Collections, CollectionsUtils.filter(), qui applique un objet Predicate à une collection.

Vous écrivez le Prédicat, les classes Apache s'occupent du reste.

4

Il n'y a pas une langue standard comme SQL, mais le apache commons collections has une méthode filter qui fera ce que vous voulez. Pas trop difficile de rouler le vôtre,

public <T> Collection<T> filter (Collection<T> c, Condition<T> condition) { 
    ArrayList<T> list = new ArrayList<T>(): 
    for (T t: c){ 
     if (condition.isSatisfied(t)) { list.add(t); } 
    } 
    return list; 
} 

public interface Condition<T> { 
    public boolean isSatisfied(T t); 
} 
1

Il existe un certain nombre de solutions pour ce faire qui exploitent XPath ou XQuery. Pour les débutants jeter un oeil à Jaxen.

3

La méthode canonique consiste simplement à itérer sur la structure de données et à insérer les objets souhaités dans un nouveau. Malheureusement, Java n'a pas de liste de compréhension ou de fonctions de première classe. Mais nous pouvons les simuler en utilisant une bibliothèque comme Functional Java:

import fj.F; 
import fj.data.List; 
import static fj.data.List.list; 
import static fj.pre.Show.listShow; 
import static fj.pre.Show.stringShow; 

List<String> myList = list("one", "two", "three").filter(
    new F<String, Boolean>() { 
    public Boolean f(String s) { 
     return s.contains("e"); 
    } 
    }); 

listShow(stringShow).print(myList); 

qui imprimera ["one", "three"] la sortie standard.

0

Une solution assez extrême pourrait être d'utiliser un ORM de quelque sorte à mapper votre objets Java dans un SQL réel base de données, puis utilisez SQL réel ou un langage SQL comme HQL de Hibernate pour interroger vos objets précisément comment vous le souhaitez.

Bien sûr, je n'envisagerais sérieusement que si j'avais en fait l'intention de conserver les objets dans la base de données de toute façon, car sinon c'est trop.

Questions connexes