Java 如何在arraylist的前n个值上应用循环

Java 如何在arraylist的前n个值上应用循环,java,arrays,for-loop,arraylist,Java,Arrays,For Loop,Arraylist,我有一个arraylist,其中我有ESSID,BSSID,前三个索引上的访问点强度,从索引4到6,我又有一个ESSID,BSSID,另一个访问点的强度。我想将这个列表像前三个值一样存储在数据库中,保存在表的一行中。接下来的三个值保存在表的第二行 String[]namesArr=新字符串[arrayList2.size]//将arraylist转换为数组 对于int j=0;j

我有一个arraylist,其中我有ESSID,BSSID,前三个索引上的访问点强度,从索引4到6,我又有一个ESSID,BSSID,另一个访问点的强度。我想将这个列表像前三个值一样存储在数据库中,保存在表的一行中。接下来的三个值保存在表的第二行

String[]namesArr=新字符串[arrayList2.size]//将arraylist转换为数组 对于int j=0;j
public class SendData  extends AsyncTask<String, Void, String> {
    AlertDialog dialog;
    Context context;

    public SendData(Context context) {
        this.context = context;
    }

    @Override
    protected void onPreExecute() {
        dialog = new AlertDialog.Builder(context).create();
        dialog.setTitle("Message");
    }

    @Override
    protected void onPostExecute(String s) {
        dialog.setMessage(s);
        dialog.show();
    }

    @Override
    protected String doInBackground(String... voids) {
        String data = "";
        String result = "";
        String MAC = voids[0];
        String Name = voids[1];
        String Strength = voids[2];


        String con_Str = "http://10.5.48.129/Webapi/accesspoints_data/create.php";
        try{
            URL url = new URL(con_Str);
            HttpURLConnection http = (HttpURLConnection) url.openConnection();
            http.setRequestMethod("POST");
            http.setDoInput(true);
            http.setDoOutput(true);
            OutputStream out_Stream = http.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out_Stream, "UTF-8"));
            JSONObject obj = new JSONObject();
            try {
                obj.put("BSSID", MAC);
                obj.put("ESSID", Name);
                obj.put("RSSID", Strength);


            } catch (JSONException e) {

                e.printStackTrace();
            }

            data = obj.toString();

            writer.write(data);
            writer.flush();
            writer.close();
            out_Stream.close();

            InputStream in_Stream = http.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in_Stream, "ISO-8859-1"));
            String line = "";
            while ((line = reader.readLine()) != null)
            {
                result += line;
            }

            reader.close();
            in_Stream.close();
            http.disconnect();
            return result;
        } catch (MalformedURLException e){
            result = e.getMessage();
        } catch (IOException e){
            result = e.getMessage();
        }

        return result;
    }
}

SendData类工作正常,但问题在于for循环。

我认为这是您期望的结果:

List<String> arrayList2 = new ArrayList<>();
        arrayList2.add("1");
        arrayList2.add("2");
        arrayList2.add("3");
        arrayList2.add("4");
        arrayList2.add("5");
        arrayList2.add("6");
        arrayList2.add("6");
        arrayList2.add("7");
        arrayList2.add("8");
        arrayList2.add("9");
        arrayList2.add("10");
        List<String[]> sarrayList  = new ArrayList<>();
        String[] arr = new String[3];
        int i = 0;
        for (int j = 0; j < arrayList2.size(); j++) 
        {
            arr[i] = arrayList2.get(j);
            i++;
            if((j+1)%3==0)
            {
                sarrayList.add(arr);
                i = 0;
                arr = new String[3];
            }

        }

        for(String [] sa:sarrayList)
        {
            for(String s:sa)
            {
                System.out.println(s);
            }
            System.out.println("=========");
        }

这可能不是最有效的方法。但它将ArrayList拆分为长度为3的字符串数组,并将它们存储在名为sarrayList的新ArrayList中。我建议使用数据结构保存记录。请参阅下面的代码这是一个小示例,说明了如何做到这一点

ArrayList记录; 对于int i=2;i好的,据我所知,你想把arraylist分成3个元素,这就是你处理streams的方法,它会返回一个arraylist的集合,每个arraylist有3个元素

final int chunkSize = 3;
        final AtomicInteger counter = new AtomicInteger();
        //arrayList here us your array list
        final Collection<List<String>> result = arrayList.stream()
            .collect(Collectors.groupingBy(it -> counter.getAndIncrement() / chunkSize))
            .values();
现在您有一个要映射的类,现在将记录保存在记录列表中 在主类中创建列表

static List<Record> lists=new ArrayList<>();
这就是保存方法

static void saveRecord(List<String> list){
         lists.add(new Record(list.get(0),list.get(1),list.get(2)));
    }

我已经将它简化为一个循环,并且还修改了insertValues,这样它就需要另外3个参数。这个

int size = arrayList2.size();
for (int j = 0; j < size; j += 3) {    
    if (size - j < 3 ) {
        break;
    }    
    String ssid = arrayList2.get(j);
    String bssid = arrayList2.get(j + 1);
    String rssid = arrayList2.get(j + 2);
    insertValues(this, ssid, bssid, rssid);
}

措辞有点不清楚,至少对我来说是这样。你能提供一个示例ArrayList和你想要得到的结果吗?你在哪里保存第二条记录?第三个呢?等等看起来只有一个变量,也许您应该创建一个类记录来保存每个记录问题不清楚,但似乎您总是使用ssid=namesArr[0],因为在每次迭代中您都将k设置为零谢谢。我制作了一个类来将这些数据发送到服务器。我认为全班都做得很好。我只想得到列表的前12个值,并想将前三个值保存为一行,然后将下三个值保存为第二行。我无法对数组的大小进行循环。它只给出前三个值。我想得到前12个值。@asma我在for循环中写的是max而不是size,这是问题所在还是你的意思?
static void saveRecord(List<String> list){
         lists.add(new Record(list.get(0),list.get(1),list.get(2)));
    }
int size = arrayList2.size();
for (int j = 0; j < size; j += 3) {    
    if (size - j < 3 ) {
        break;
    }    
    String ssid = arrayList2.get(j);
    String bssid = arrayList2.get(j + 1);
    String rssid = arrayList2.get(j + 2);
    insertValues(this, ssid, bssid, rssid);
}
ssid = arrayList2.get(j);
bssid = arrayList2.get(j + 1);
rssid = arrayList2.get(j + 2);
insertValues();