Lambdaj (i kilka innych podobnych bibliotek) zapewnia having
funkcję, która pozwala mi określić predykaty jak tak (przykład bezpośrednio ze strony lambdaj Features):Czy istnieje biblioteka Java do definiowania predykatów jako łańcuchów podobnych do SQL?
List<Person> oldFriends =
filter(having(on(Person.class).getAge(), greaterThan(30)), meAndMyFriends);
ja bardzo lubię być w stanie określić mój Java orzecznik obiekt za pomocą prostego składni ciąg, "age > 30"
- podobny do SQL gdzie klauzuli - tak filtr powyżej staje się czymś w rodzaju:
List<Person> oldFriends =
filter(having(Person.class, "age > 30"), meAndMyFriends);
istnieje taka biblioteka, czy ktoś może polecić jakieś cegiełki dla zapytania parsowania strony i co użyjesz go do samodzielnego zbudowania? Nie mam nic przeciwko temu, jaki rodzaj orzeczenia (hamcrest, guava itp.) Tworzy.
Z góry mojej głowy mogę pomyśleć o wielu rzeczach, które wspaniale byłoby wspierać: równości i nierówności, o niestandardowych i pierwotnych typach, i/lub/nie, nawiasy, LIKE
(dla ciągów znaków) , in(...)
, interpretacja nazw wyliczeniowych, właściwości właściwości.
Oto przykład bardziej złożonych predykatu:
"salesCount > 10 and (country='UK' or city='New York')
and attitude not in (MENACING, RUDE)
and product.name <> 'Widget' "
(W tym przykładzie zakłada się, że klasa orzeczenie stosuje się (powiedzmy SalesPerson
klasa) posiada metody getSalesCount() getCountry() i getCity(), a także getAttitude() (która zwraca element wyliczeniowy), a także właściwość getProduct, która zwraca typ z metodą getName).
Motywacja: mamy system klient-serwer, który ma wiele interfejsów API języka (obecnie Java & C#); Szukam agnostycznego języka dla użytkownika, aby określić predykat, który filtruje na zbiorze obiektów, których dokładna zawartość jest znana tylko procesowi serwera (który jest napisany w Javie).
Dochodzenie w sprawie tworzenia DSL, szczególnie wewnętrznych w twoim przypadku. –
Ten wątek może pomóc http://stackoverflow.com/questions/5620985/is-there-any-good-dynamic-sql-builder-library-in-java –
Wygląda na to, że szukasz czegoś podobnego do LINQ, które nie wydaje się istnieje (jeszcze). Może znajdziesz coś tutaj: http: //stackoverflow.com/questions/1217228/what-is-the-java-equivalent-for-linq –