我有两个发送给MySql的列表。
public ArrayList<Double> lat = new ArrayList<Double>();
public int l = lat.size();
public ArrayList<Double> lng = new ArrayList<Double>();
public int ll = lng.size();
Double l = lat.get(i);
Double ll = lng.get(i);
String sql = "INSERT INTO tab (lat, lng) VALUES('" + l + "', '" + ll + "')";
stmt.executeUpdate(sql);
但顺序错误,所以我把
Collections.reverse(lat);
Collections.reverse(lng);
之前
Double l = lat.get(i);
Double ll = lng.get(i);
并且一切正常,但当我再次使用此方法时,列表中的相同元素将再次颠倒顺序......
将元素添加到列表中:
lat.add(l, currentLatitude);
lng.add(ll, currentLongitude);
怎么做,这些元素一直处于良好状态?
答案 0 :(得分:1)
使用ListIterator及其hasPrevious API。它将帮助您以相反的顺序解析列表。
from sympy import *
from sympy.parsing.sympy_parser import parse_expr
x, y, z = symbols("x y z")
input = " x ** 2 * log( x ) "
#expr = sympify(input) # `sympify` uses `eval`
expr = parse_expr(input)
print(expr)
print(expr.subs({x:2}))
input = "1 / sqrt(2*pi) * exp(- x **2 / 2) "
#expr = sympify(input) # `sympify` uses `eval`
expr = parse_expr(input)
print(expr)
print(expr.subs({x:2}))
答案 1 :(得分:0)
Collections.reverse
方法会更新lat
和lng
订单,但这对您来说并不合适,因为此代码是由按钮执行的,并且会一直执行。我想你可以从最后开始迭代lat
和lng
arraylists:
public ArrayList<Double> lat = new ArrayList<Double>();
for(int l=0 ...){
... retrieve currentLatitude
lat.add(l, currentLatitude);
}
public int l = lat.size();
public ArrayList<Double> lng = new ArrayList<Double>();
for(int ll=0 ...){
... retrieve currentLongitude
lng.add(ll, currentLongitude);
}
public int llsize = lng.size();
for(int i=llsize-1;i>=0;i--){
Double l = lat.get(i);
Double ll = lng.get(i);
String sql = "INSERT INTO tab (lat, lng) VALUES('" + l + "', '" + ll + "')";
stmt.executeUpdate(sql);
}
...
答案 2 :(得分:0)
将您的列表放在一个缓冲区中,每个列表一个。
var bufLat = new ArrayList<Double>(lat);
var bugLng = new ArrayList<Double>(lng);
然后每个下一个操作,在缓冲区上进行:
Collections.reverse(bufLat);
Collections.reverse(bufLng);
Double l = bufLat.get(i);
Double ll = bufLng.get(i);
这样您就可以避免修改列表的原始顺序,并且可以继续添加新项目,保留其在列表中的插入顺序。
至于关注db sql插入db的方式:
String sql = "INSERT INTO tab (lat, lng) VALUES('" + l + "', '" + ll + "')";
stmt.executeUpdate(sql);
这是一个不太好的做法,因为它会打开可能的SQL注入攻击..为了更好的解决方案,请参阅SO https://stackoverflow.com/a/8218932/3762855上的这个示例
答案 3 :(得分:0)
lat.add(l, currentLatitude);
lng.add(ll, currentLongitude);
根据javadoc(https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#add-int-E-)看起来有点奇怪 l和ll应该是索引,在这里,你使用的是双值。
您可能已在此处切换参数