Merge two arraylists in a simple form of Polish Notation
I have two arraylists of type String, one of Operands and one of Operators
ArrayList<String> operands = new ArrayList<String>();
ArrayList<String> operators = new ArrayList<String>();
They are filled like so
operands = { ""symbol": "CHKP%"", ""price": {$gt: 23.72" };
operators = { "and"};
Ideally I would convert this to a single ArrayList that is filled like so
ArrayList<String> polishNotation = { "and",
""symbol": "CHKP%"",
""price": {$gt: 23.72" };
It would be easy to hardcode Polish Notation for three elements, but I have varying numbers of operators and operands (up to four operands and three operators). This code is to be used to convert SQL select statements to MongoDB.find() statements. Any pointers on how to implement the ArrayList merge in Polish Notation(prefix polish notation) would be much appreciated.
[Edit 2] Below is an example of an SQL statement with 3 operators ("like", "and", "<") and three operands ('FLIR%', "price", "price") and it's MongoDB equivalent. I think using Polish Notation can help me convert SQL's order of the query into a Mongo-ordered query
in SQL
SELECT * FROM STOCK WHERE symbol like 'FLIR%' and price > 24.04 and price < 24.39;
in MongoDB
db.STOCK.find({
"symbol": "FLIR%",
"price": {
"$gt": 24.04,
"$lt": 24.39
}
}
If you are going to write a parser like this it is going to a fairly big project because the sql query could get more and more complex. You could try using ANTLR. It has an sql grammar. Or GeneralSqlParser or other parser to tokenize your sql statement an then construct your mongo statements.
If you are not particular about writing a program you can rely on the Query Mongo project. It does what you need. Please refer to that site.
Still you are determined to get a quick solution for this via Java, you can try the below program. This uses jsoup to submit you query to the querymongo site and retrieve the mongo query.
Hope this helps :)
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/79136.html
上一篇: =='
下一篇: 以简单的波兰语法形式合并两个数组列表