2 learningcsdn learningcsdn 于 2016.04.21 17:45 提问

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

如下面一个类,类中有一个属性是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();
}
}
}





4个回答

xianfajushi
xianfajushi   2016.04.21 19:10
baidu_32932571
baidu_32932571   2016.04.21 19:33

虽然没有看懂你写的,但是对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;
}
    可能实现的方法比较复杂,但是我想到的只有这种方法了。。。
learningcsdn
learningcsdn   2016.04.27 17:06

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

 /**
     * 把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

learningcsdn
learningcsdn   2016.04.27 17:08

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
编程之美2.18——数组分割
问题: 1. 有一个无序、元素个数为2n的正整数数组,要求:如何能把这个数组分割为两个子数组,子数组的元素个数不限,并使两个子数组之和最接近。 2. 有一个无序、元素个数为2n的正整数数组,要求:如何能把这个数组分割为元素个数为n的两个数组,并使两个子数组之和最接近。 1. 解法1: 由于对两个子数组和最接近的判断不太直观,我们需要对题目进行适当转化。我们知道当一个子数组之和最接近
数组分割(动态规划问题)
题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。(啃了好久才啃明白,主要是动态规划可惜忘了,第一眼看不懂的童鞋洗洗睡睡明天继续研究哈,更多精彩请看《编程之美》) 第一想法: 是从2N个数的数组中提取所有N的组合情况,估计需要N个for循环,此时至少为N的阶乘的时间复杂度;然后想到动态规划的0-1背包(其实是看了原文才
易语言钓鱼源码
求大神买走 求大神买走 易语言钓鱼源码
动态规划之数组分割问题
题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。 拿到题目后的解题思路就是得到2N个数和的一半,记为half,然后从2N个数中找到N个数,使得N个数相想加的和小于等于但是最接近half。 一开始计算时用了以下的代码: for(int i=1;i<=n2;i++){ for(int j=ave;j>=
左菜单侧滑
侧滑的一个例子 求大神解决下2次选中侧滑标签列表失焦问题
ELM——HOG
代码有问题 出现内存访问错误 求大神帮忙修改
MSP430读取mpu6050卡尔曼滤波
MSP430读取mpu6050卡尔曼滤波,一直研究滤波的问题就是没弄出来,求大神知道啊,
求大神,求大神 求大神
课程设计任务书 题目 自动发牌程序设计 主要 内容 开发一个自动发扑克牌的软件,使之能完成以下基本功能: 1)52张扑克牌(无大小王)随机分发给4个玩家,每个玩家13张牌。 2)数据包括:4种花色(黑、红、梅、方),每种花色13张牌(2、3、4、5、6、7、8、9、T、J、Q、K、A)。 3)按花色和大小依次输出每个玩家被发给的牌。 4) 要求使用:随机函数、循环、数组、函数、数组名作为函数的参数、模块化程序设计等知识。
数组分割问题
题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。 /* ArrayPartition int data[] = {1, 5, 7, 8, 9, 6, 3, 11, 20, 17}; 将一个有2n个元素的数组分割成元素个数相等(n)的两部分,使得两部分的和值最接近 @author arhaiyun date:201
问题求大神解答
求大神解答,还在加班