以简单的波兰语法形式合并两个数组列表
我有两个String类型的数组列表,一个操作数和一个操作符
ArrayList<String> operands = new ArrayList<String>();
ArrayList<String> operators = new ArrayList<String>();
他们像这样充满
operands = { ""symbol": "CHKP%"", ""price": {$gt: 23.72" };
operators = { "and"};
理想情况下,我会将其转换为一个像这样填充的ArrayList
ArrayList<String> polishNotation = { "and",
""symbol": "CHKP%"",
""price": {$gt: 23.72" };
对三个元素进行波形表示法的硬编码很容易,但我有不同数量的运算符和操作数(最多四个操作数和三个运算符)。 此代码将用于将SQL select语句转换为MongoDB.find()语句。 任何关于如何实现波兰语表示法(前缀波兰语表示法)合并的指针将不胜感激。
[编辑2]下面是一个带有3个运算符(“like”,“and”,“<”)和三个操作数('FLIR%',“price”,“price”)的SQL语句的示例,它与MongoDB等效。 我认为使用Polish Notation可以帮助我将SQL的查询顺序转换为Mongo顺序查询
在SQL中
SELECT * FROM STOCK WHERE symbol like 'FLIR%' and price > 24.04 and price < 24.39;
在MongoDB中
db.STOCK.find({
"symbol": "FLIR%",
"price": {
"$gt": 24.04,
"$lt": 24.39
}
}
如果你要写这样的解析器,它将会是一个相当大的项目,因为sql查询可能会变得越来越复杂。 你可以尝试使用ANTLR。 它有一个sql语法。 或者使用GeneralSqlParser或其他解析器来标记您的sql语句,然后构造您的mongo语句。
如果你对写程序没有特别的要求,你可以依赖Query Mongo项目。 它可以满足你的需求。 请参考该网站。
你仍然决定通过Java获得这个快速解决方案,你可以尝试下面的程序。 这使用jsoup将查询提交给querymongo站点并检索mongo查询。
希望这可以帮助 :)
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class MongoQuery {
public static void main(String[] args) throws Exception {
System.setProperty("http.proxyHost", "10.9.248.37");
System.setProperty("http.proxyPort", "18082");
Document doc = Jsoup.connect("http://www.querymongo.com/")
.data("MySQLQuery", "SELECT * FROM STOCK WHERE symbol like 'FLIR%' and price > 24.04 and price < 24.39")
.post();
for(Element e : doc.select("#mongoQuery")){
System.out.println(e.val());
}
}
}
链接地址: http://www.djcxy.com/p/79135.html
上一篇: Merge two arraylists in a simple form of Polish Notation