java-数组分割问题,求大神提示

问题描述

数组分割问题,求大神提示

如下面一个类,类中有一个属性是list,现在要对list分割,比如 每10条 为一个list。
例如,list长度为25.然后分割后的结果为三个 Base,Base中list分别为10,10 ,5

 public class Base {

    private List<Object> list;
}

我是想写一个公共的工具,然后在项目中使用,想了半天没想到什么通用的方法,好头疼,求大神提示

这是我写的一个分割链表的工具,但是现在这个链表是放在一个类中的,改怎么实现呢?

```private void cutAndSend (String queueName, List list) {
List temp = new ArrayList();
for (int i = 0; i < list.size();) {
if (i + LEN < list.size()) {
int j = i + LEN;
while (i < j) {
temp.add(list.get(i++));
}
i = j;
//temp 就是分割好的,可以调用其他方法使用
temp.clear();
} else {
while (i < list.size()) {
temp.add(list.get(i++));
}
//temp 就是分割好的,可以调用其他方法使用
temp.clear();
}
}
}



解决方案

http://blog.csdn.net/xianfajushi/article/details/7015535
类似内存分页原理

解决方案二:

虽然没有看懂你写的,但是对list进行指定长度的分割可以这样实现:
public List cutList(int length,List list){

   List<Base> baseList = new ArrayList<Base>();

   int i = list.size() / length;

   for(int x =0; x<i;x++){
       Base base = new Base();
       list.subList(x*length, x*length+length-1);
       baseList.add(base);
   }
   if(list.size() % length !=0){
       Base base = new Base();
       list.subList((i-1)*length, (i-1)*length+(list.size() % length));
       baseList.add(base);
   }
   return baseList;
}
    可能实现的方法比较复杂,但是我想到的只有这种方法了。。。

解决方案三:

感谢楼上两位的提示,可能我没有把问题描述清楚,不过问题已经解决了,拿出来分享下:

 /**
     * 把list每LEN条数据,发送AMQ
     *
     * @param <T>
     * @param queueName
     * @param list
     */
    private <T> void send(String queueName, List<T> list) {
        List<T> temp = new ArrayList<T>();
        SendData<T> sendData = new SendData<T>();
        for (int i = 0; i < list.size();) {
            if (i + LEN < list.size()) {
                int j = i + LEN;
                while (i < j) {
                    temp.add(list.get(i++));
                }
                i = j;
                sendData.setList(temp);
                sendAMQ(queueName, sendData);
                temp.clear();
            } else {
                while (i < list.size()) {
                    temp.add(list.get(i++));
                }
                sendData.setList(temp);
                sendAMQ(queueName, sendData);
                temp.clear();
            }
        }
    }

其中 SendData 是:

 public class SendData<T> implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = -8167506370744303318L;

    private List<T> list;

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

}

这样 send(String queueName, List list) 能接受任何类型的list,并且会把list 按照指定的长度LEN 分组,每一组list 都会塞进 SendData 中。就是我描述的问题:
对list分割,比如 每10条 为一个list,假如list长度为25.然后分割后的结果为三个 Base,Base中list分别为10,10 ,5

解决方案四:

之所以要这样,是为了 能批量发送AMQ,然后接收端能够进行反序列化得到数据

时间: 2024-08-04 14:25:54

java-数组分割问题,求大神提示的相关文章

对象-java JDBC 批量插入的时候报数组下标越界,求大神

问题描述 java JDBC 批量插入的时候报数组下标越界,求大神 代码:private static Boolean Function_User(Map resultMap String sqlString tableType) { // TODO Auto-generated method stub Connection conn=null; PreparedStatement insert_st=null; int count = 0; final int batchSize = 500;

遍历-Java字符串问题,求大神帮帮忙

问题描述 Java字符串问题,求大神帮帮忙 请用Java写这个程序,思考题: I am a student ! 定义一个方法: !student a am I 我有思路,但是我实现代码有困难,我的思路是:先将原字符串转换为字符数组,然后从头遍历,判断某个字符是否为空,一旦为空,将前面的存放到list集合中.然后继续从下一个开始遍历,然后判断是否为空,不为空继续向下遍历,然后继续遍历到为空的那个字符,然后继续将不为空的作为一个整体存入list集合中,往复循环进行,直至全部不为空的字符个数全部进入l

数据存数组,新人求大神们解答啊

问题描述 数据存数组,新人求大神们解答啊 我从页面取到的值是 A1A2A3A4A5................不知道用户会输入多少 我怎么把这些数据保存到数组呢 解决方案 String类的split方法可以使用给定的正则表达式分割字符串为字符串数组Case: String str = ""A1A2A3A4A5""; String[] strArr = str.split(""); 解决方案二: 总该有一个结束标记吧..ps:什么语言? 解决方

关于java问题-Java循环结构初学者求大神带

问题描述 Java循环结构初学者求大神带 从键盘接收一批整数,比较其中最大值和最小值,输入数字0时循环结束. 解决方案 import java.util.Scanner;public class Test0305 { public static void main(String[] args) { Scanner s=new Scanner(System.in); int min=Integer.MAX_VALUE; int max=Integer.MIN_VALUE; int value=s.

数组 url-多个url 怎么保存到数组中呢 求大神给看看下面的代码拿错 了 痛苦啊

问题描述 多个url 怎么保存到数组中呢 求大神给看看下面的代码拿错 了 痛苦啊 package com.li.textc; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem;

关于java 的split,求大神解决一下啊

问题描述 关于java 的split,求大神解决一下啊 代码 ",,,,".split(',') 我想得到Array('','','','') 但结果我却得到了Array() 有什么办法能得到我想要的结果呢... 解决方案 可以使用含有两个参数的split方法,如",,,,".split(",", -1),你调用的那个含有一个参数的方法默认实现如下: public String[] split(String regex) {return spli

java-一个Java基础问题,求大神多指导

问题描述 一个Java基础问题,求大神多指导 ?class A { A(int i) { System.out.println("A"); } } class B extends A { B(int i) { // super(i); System.out.println("B"); } } public class Test { public static void main(String[] args) { new B(100); } } 解决方案 实例化子类B

字段-ASP数组拆分。求大神帮助详解?

问题描述 ASP数组拆分.求大神帮助详解? 如有一个表名:t_biao 字段power,有一组数据:|8|5|22|10|7|6|4|9|17|20| 把它拆分出来,显示成这样的格式: 85221076491720 如何分割符号"|",程序该怎么写???请大神不悋赐教 解决方案 string s = "|8|5|22|10|7|6|4|9|17|20|"; Response.WriteLine(s.Trim('|').Replace("|", &

java报文解析!求大神指导!

问题描述 java报文解析!求大神指导! 大家帮我解析一下报文吧!我用的是UDP通信拿到数据,数据的类型是这样的S5W1449!p1r!p1r003B1s!S6WGGG00!p2r!p2r00003!p1r!p1r003B1s! 第0~2位为p1r或p2r,第3~6位为对应侧(p1r或p2r)的点位,第7位为状态位第8位为CRC校验位(将以上待发送的8位 异或)第9位为!结束位. 比如p1r!p1r003B1s!,我要拿到点位003B,要把它转化成十进制显示在我的界面画图!我要怎么解析报文!能写