Lambdaj(およびいくつかの他の同様のライブラリが)私はそう(直接lambdaj Featuresページの例)のような述語を定義することができますhaving
機能提供:述語をSQLのような文字列として定義するためのJavaライブラリがありますか?
List<Person> oldFriends =
filter(having(on(Person.class).getAge(), greaterThan(30)), meAndMyFriends);
を私はかなり私のJavaを定義することができるようにしたいのですが
List<Person> oldFriends =
filter(having(Person.class, "age > 30"), meAndMyFriends);
は、このようなライブラリが存在するか、あるいは誰がクエリの構文解析部分のいくつかのビルディング・ブロックをお勧めすることができます: - SQLに似たwhere句 - 単純な文字列構文、"age > 30"
使用して述語オブジェクトので、上記フィルタは、何かのようになり、私は共同uldを使って自分自身を作る?私は実際にどのような述語(hamcrest、guavaなど)が作成するのか気にしません。
私の頭の上には、平等と不等式、カスタムとプリミティブの種類、および/またはかっこ、LIKE
(文字列の場合)がサポートされています。 、in(...)
、enum名の解釈、プロパティのプロパティ。ここで
は、より複雑な述語の例です:
"salesCount > 10 and (country='UK' or city='New York')
and attitude not in (MENACING, RUDE)
and product.name <> 'Widget' "
は(この例では、クラスは述語が(たとえばSalesPerson
クラスに適用されていることを前提と)メソッドgetSalesCount()、はgetCountry()、およびgetCityを持っています()、getAttitude()(enumを返す)、getName()メソッドを持つ型を返すgetProductプロパティもあります。
動機:複数の言語API(現在はJava & C#)を持つクライアントサーバーシステムがあります。私は、ユーザーがサーバー・プロセス(Javaで書かれている)にのみ正確な内容が知られているオブジェクトのセットをフィルタリングする述語を指定するための、言語に依存しない方法を探しています。
あなたのケースでは特にDSLの内部作成について調べてください。 –
このスレッドは役立つかもしれませんhttp://stackoverflow.com/questions/5620985/is-there-any-good-dynamic-sql-builder-library-in-java –
あなたはLINQのように見えないようです存在する(まだ)。たぶんあなたはここに何かを見つけるでしょう:http://stackoverflow.com/questions/1217228/what-is-the-java-equivalent-for-linq –