2016-04-27 14 views
1

これは残念なことに醜いです。私は、データベースに制約として送られる書式で書かれた文字列を持っています。String論理式をJava実行可能式に変換する方法

stream.filter(obj -> 
    (obj.getAttr1() == 1 || obj.getAttr2() == 5) && (isBetween(obj.getAttr3(), 1, 5))) 

isBetween方法がattr3値があるかどうかを判断することを他の場所である:私はそう見えるように、ストリームフィルタにこれを解析する方法が必要です

String constraint = "((attr1 eq 1) OR (attr2 eq 5)) AND (attr3 BETWEEN (1, 5))" 

:それは次のようになります1と5の間です。これを解析する簡単な方法はありますか?

すべてを1つにまとめるのではなく、複数のフィルタ呼び出しを行うのはいいでしょう。あなたはEvalExに見えるしたいと思うかもしれ

if (attr.equals("attr1")) { 
    obj.getAttr1(); 
} 

答えて

1

:GETATTRを使用するかを決定するの線に沿ってif文で行うことができます。これは、一般的な表現パーサと評価者です。

あなた自身の演算子を定義することができるので、 "eq"、 "and"、 "or"は問題ではありません。変数を作成することができますので、 "attr1"と友人のどちらも問題ではありません。あなたが右側に複数の引数を取るオペレータ、または後置演算子を返す関数を定義することができるかどう

attr3 BETWEEN (1, 5) 

わからない:

この1つは可能性の問題です。しかし、ソースコードが利用できるので、おそらくあなたは1つをハックすることができます。

関連する問題