2009-04-10 1 views
3

Java 데이터 구조에서 SQL Like Queries 또는 Filtering을 수행 할 수있는 방법이 있습니까?Java 데이터 구조 쿼리

ArrayList의 객체와 그 안에 포함 된 객체의 필드로 HashMap을 필터링하려고합니다.

답변

5

당신은 자바 객체 그래프에 대한 상당히 풍부한 쿼리 언어입니다 Quaere, 같은 수 있습니다

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

예 아니요.

아니요, SQL 구문이 아닙니다.

예, 필터 기능이 있습니다. 특히, Predicate 객체를 Collection에 적용하는 Apache Commons Collections, CollectionsUtils.filter() 함수를 살펴보십시오.

포지티브를 작성하면 아파치 클래스가 나머지를 처리합니다.

4

표준 SQL과 유사한 표준 언어가 없지만 원하는 것을 수행 할 수있는 commons collections has filter 메소드가 있습니다.

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

XPath 또는 XQuery를 활용하는 방법에는 여러 가지가 있습니다. 처음에는 Jaxen을 살펴보십시오.

3

표준 방식은 데이터 구조를 반복하고 원하는 개체를 새로운 개체에 삽입하는 것입니다. 유감스럽게도 Java에는 목록 이해 또는 일류 함수가 없습니다. 그러나 우리는 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); 
인쇄됩니다

["one", "three"]를 표준 출력에.

0

하나 오히려 극단적 인 해결책은 자바 실제 SQL로 객체를 매핑하는 어떤 종류의 ORM을 사용하는 수도를 Hibernate의 HQL과 같은 실제 SQL이나 SQL과 같은 언어를 사용하여 정확하게 원하는 방식으로 객체를 쿼리하십시오.

물론 데이터베이스에서 객체를 실제로 유지하려는 경우, 그렇지 않으면 잔인 함을 심각하게 고려해야합니다.