反向列表,但一次

时间:2016-12-06 09:44:26

标签: java android arraylist

我有两个发送给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);

怎么做,这些元素一直处于良好状态?

4 个答案:

答案 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方法会更新latlng订单,但这对您来说并不合适,因为此代码是由按钮执行的,并且会一直执行。我想你可以从最后开始迭代latlng 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应该是索引,在这里,你使用的是双值。

您可能已在此处切换参数