java一个list拆分的问题

问题描述

java如何将一个list平均拆成十个list,如果list的size不能被10整除那么,比如是size是599,那么前九个每个list是60,最后一个list的是59,一次类推,也就是说如果不能整除也尽量保证10个list尽量保持平均,前九个一样大剩余的给第十个,总数加起来还是list的总大小,这个算法怎么写?

解决方案

解决方案二:
java裏面有個求模的比如599%10這樣就等於9可以先分最後的在平分前面的
解决方案三:
/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubList<Integer>list=newArrayList<Integer>();for(inti=1;i<55;i++)//55是一个动态变量测试的时候先写死list.add(i);intcount=list.size()/10;intyu=list.size()%10;for(inti=0;i<10;i++){List<Integer>subList=newArrayList<Integer>();if(i==9){subList=list.subList(i*count,count*(i+1)+yu);}else{subList=list.subList(i*count,count*(i+1));}System.out.println(subList);}}我网上看了下修改了一下现在这样先输出结果是对的,你们帮我看看还有什么疏漏没?或者有没有更好的写法
解决方案四:
这个publicstaticvoidmain(String[]args)throwsIOException{intnum=599;inttem=0;if(num%10!=0){tem=10-num%10;System.out.println((tem+num)/10);System.out.println(num-(tem+num)/10*9);}}

解决方案五:
引用3楼rui888的回复:

这个publicstaticvoidmain(String[]args)throwsIOException{intnum=599;inttem=0;if(num%10!=0){tem=10-num%10;System.out.println((tem+num)/10);System.out.println(num-(tem+num)/10*9);}}

啥意思啊能写完整点不
解决方案六:
我觉得也是先求余数操作,如果等于0的话正好分配完全余数等于9的话,前9个list的size可以分成一样大,最后一个最小余数小于9一个结果最后一个list的size最大
解决方案七:
这个只是判断前面有多少个相同的,最后一个的个数是多少。mod可以算出来。后面就用subList函数就行了
解决方案八:
引用6楼huxiweng的回复:

这个只是判断前面有多少个相同的,最后一个的个数是多少。mod可以算出来。后面就用subList函数就行了

那具体怎么写好呢最好性能好点因为实际项目中这个list的size可能会有好几万
解决方案九:
doubleFirst=599;doubleSecond=10;intscale=0;BigDecimalb1=newBigDecimal(Double.toString(First));BigDecimalb2=newBigDecimal(Double.toString(Second));intone=(int)b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();System.out.println(one);intlost=(int)(First-one*(Second-1));System.out.println(lost);

解决方案十:
引用8楼scottxzj的回复:

doubleFirst=599;doubleSecond=10;intscale=0;BigDecimalb1=newBigDecimal(Double.toString(First));BigDecimalb2=newBigDecimal(Double.toString(Second));intone=(int)b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();System.out.println(one);intlost=(int)(First-one*(Second-1));System.out.println(lost);

能写完整点么
解决方案十一:
引用7楼koproblem的回复:

Quote: 引用6楼huxiweng的回复:
这个只是判断前面有多少个相同的,最后一个的个数是多少。mod可以算出来。后面就用subList函数就行了

那具体怎么写好呢最好性能好点因为实际项目中这个list的size可能会有好几万

我觉得你把好几万的数据放到list就是不明智的选择。性能好点的话,不要把所有记录全部放到list里,在数据库层分页。比如记录有10000条,此时你要分成100个list,那你先取100个放list里。
解决方案十二:
intFirst=599;intSecond=10;intscale=0;BigDecimalb1=newBigDecimal(Double.toString(First));BigDecimalb2=newBigDecimal(Double.toString(Second));//前面9个的值intone=b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).intValue();System.out.println(one);//最后一个的值intlost=First-one*(Second-1);System.out.println(lost);

解决方案十三:
引用10楼huxiweng的回复:

Quote: 引用7楼koproblem的回复:
Quote: 引用6楼huxiweng的回复:
这个只是判断前面有多少个相同的,最后一个的个数是多少。mod可以算出来。后面就用subList函数就行了

那具体怎么写好呢最好性能好点因为实际项目中这个list的size可能会有好几万

我觉得你把好几万的数据放到list就是不明智的选择。性能好点的话,不要把所有记录全部放到list里,在数据库层分页。比如记录有10000条,此时你要分成100个list,那你先取100个放list里。

我要做并发任务,所以要全部拿到再分成十份list进行分发
解决方案十四:
publicstaticvoidmain(String[]args){//你的list.sizeintFirst=599;//你要分组成几个listintSecond=10;//精度intscale=0;BigDecimalb1=newBigDecimal(Double.toString(First));BigDecimalb2=newBigDecimal(Double.toString(Second));//前面9个的值intone=b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).intValue();System.out.println(one);//最后一个的值intlost=First-one*(Second-1);System.out.println(lost);}

还有说明一点线程不是你这么玩的,可以把整个list共享出来,线程可以不重复的取,而且哪个完了哪个出来取点。
解决方案十五:
publicstaticvoidmain(String[]args)throwsIOException{//list的长度intnum=599;inttemp=0;//不能够整除10的场合if(num%10!=0){//需要凑的数量temp=10-num%10;//前9个每个取的条数System.out.println((temp+num)/10);//第10个最后一条取的list的长度System.out.println(num-(temp+num)/10*9);}}

解决方案:
引用14楼rui888的回复:

publicstaticvoidmain(String[]args)throwsIOException{//list的长度intnum=599;inttemp=0;//不能够整除10的场合if(num%10!=0){//需要凑的数量temp=10-num%10;//前9个每个取的条数System.out.println((temp+num)/10);//第10个最后一条取的list的长度System.out.println(num-(temp+num)/10*9);}}

601条的时候前9条是61,最后一个是52这个不合理吧如果尽量平均前9个应该是60最后一个是61吧
解决方案:
引用14楼rui888的回复:

publicstaticvoidmain(String[]args)throwsIOException{//list的长度intnum=599;inttemp=0;//不能够整除10的场合if(num%10!=0){//需要凑的数量temp=10-num%10;//前9个每个取的条数System.out.println((temp+num)/10);//第10个最后一条取的list的长度System.out.println(num-(temp+num)/10*9);}}

不够平均哦~这个只往上凑数要是591,就不够平均了
解决方案:
用自带的方法吧publicBigDecimaldivide(BigDecimaldivisor,intscale,introundingMode){/**IMPLEMENTATIONNOTE:Thismethod*must*returnanewobject*sincedivideAndRoundusesdividetogenerateavaluewhose*scaleisthenmodified.*/if(roundingMode<ROUND_UP||roundingMode>ROUND_UNNECESSARY)thrownewIllegalArgumentException("Invalidroundingmode");/**Rescaledividendordivisor(whichevercanbe"upscaled"to*producecorrectlyscaledquotient).*Takecaretodetectout-of-rangescales*/BigDecimaldividend=this;if(checkScale((long)scale+divisor.scale)>this.scale)dividend=this.setScale(scale+divisor.scale,ROUND_UNNECESSARY);elsedivisor=divisor.setScale(checkScale((long)this.scale-scale),ROUND_UNNECESSARY);returndivideAndRound(dividend.intCompact,dividend.intVal,divisor.intCompact,divisor.intVal,scale,roundingMode,scale);}

引用15楼songbgi的回复:

601条的时候前9条是61,最后一个是52这个不合理吧如果尽量平均前9个应该是60最后一个是61吧

引用16楼scottxzj的回复:

不够平均哦~这个只往上凑数要是591,就不够平均了

没考虑全//list的长度intnum=591;inttemp=0;//不能够整除10的场合if(num%10!=0){if(num%10<5){//需要凑的数量temp=num%10;//前9个每个取的条数System.out.println((num-temp)/10);//第10个最后一条取的list的长度System.out.println(num-(num-temp)/10*9);}else{//需要凑的数量temp=10-num%10;//前9个每个取的条数System.out.println((temp+num)/10);//第10个最后一条取的list的长度System.out.println(num-(temp+num)/10*9);}}

解决方案:
和分页查询的思路貌似有点类似总数(size)每一页显示的数据个数(list大小)多少页(拆分的list个数)
解决方案:
我自己最终是这样写的:/***javalist拆分最终确定版*@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubList<Integer>list=newArrayList<Integer>();intsizes=122;//sizes是一个动态变量测试的时候先写死for(inti=1;i<=sizes;i++)list.add(i);intcount=list.size()/10;intyu=list.size()%10;for(inti=0;i<10;i++){List<Integer>subList=newArrayList<Integer>();if(i==9){subList=list.subList(i*count,count*(i+1)+yu);}else{subList=list.subList(i*count,count*(i+1));}System.out.println(subList);}}
解决方案:
先用SQL查询总数据量,然后将总数据量求10份或多分的平均值(线程变量),然后定义线程变量,记录已经取到多少条数据了,查询从多少条到多少条数据,并修改已经取到第多少数据了!
解决方案:
先取平均数,然后把剩余元素平均分到每个list上比如23,平均数2,剩余元素3结果:3,3,3,2,2,2,2,2,2,2publicstaticvoidmain(String[]args){intsize=586;//总数intlistCount=10;//拆分数量int[]arr=newint[listCount];intavg=size/listCount;//平均数intaddIndex=size-avg*listCount;//需要增加1个数量的最大下标for(inti=0;i<listCount;++i){arr[i]=i<addIndex?avg+1:avg;}System.out.println(Arrays.toString(arr));}

[59,59,59,59,59,59,58,58,58,58]

时间: 2024-08-28 03:56:25

java一个list拆分的问题的相关文章

java方法-java一个方法形参有两个,如何在调用的时候只传入一个参数

问题描述 java一个方法形参有两个,如何在调用的时候只传入一个参数 如题,有一个方法里两个形参,我另一个文件类中一个方法想要那个方法的返回值,可是第二个参数在这里用不到,能否只传第一个参数 如何实现,前提这个类不能继承后重写方法,因为多人合同写的. 解决方案 不可以,变通的办法是再写一个只有一个参数的函数重载形式,在其中给另一个参数一个预设值,间接调用. 解决方案二: 一个Action调用两个不同的方法 解决方案三: 调用的时候给一个无影响的值 解决方案四: 讲道理的话是不能这样做的,不过如果

关于java一个计算和图像打印的像素强度值的直方图的问题

问题描述 关于java一个计算和图像打印的像素强度值的直方图的问题 问题在这个网址上,希望大家能帮我解答一下,不胜感激!http://www.cs.unc.edu/~kmp/comp401sp16/assignments/a2/sp16-a2.html 解决方案 建议你自己将问题翻译为中文,否则后果可想而知.

java一个已继承东西的类如何使用actionSupport里的getText()方法

问题描述 java一个已继承东西的类如何使用actionSupport里的getText()方法 java中,我的一个公共类已继承了一个java类,如何在这个类里使用actionSupport里的getText()方法? 解决方案 ActionSupport.getText()方法ActionSupport.getText()方法ActionSupport.getText()方法 . 解决方案二: 呵呵 经验告诉我 有办法 单继承的java 一般会有俩种机制 1:是继承 2:是实现接口,

java一个类不能实现同一泛型接口的两种变体

问题描述 java一个类不能实现同一泛型接口的两种变体 今天看<JAVA编程思想>,看到泛型的时候看到**"一个类不能实现同一泛型接口的两种变体"**(P401) 这样一句话,请问为什么 例子一 例子二 例子三(正确) 解决方案 和java实现泛型的方式有关,java采用的是编译期的直接替换.这意味着可能出现相同的方法有两个参数一样的重载,这是不合法的.

如何查看java一个类的大小

问题描述 如何查看java一个类的大小 就比如我搞了一个类,然后往里边set各种值,我现在想知道这个类的占空间的大小?比如多少KB或者多少MB什么的? 解决方案 如果你知道你的类的路径的话,例如D:aa.txt 那么就 public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream(new File("D:\aa.txt")); } catch (F

java一个mina框架的传输对象的问题

问题描述 java一个mina框架的传输对象的问题 我用mina传递一个对象,这个对象里面包含了一张图片的字节数组,和字节数组的长度,当我从客户端将该对象传到服务器的时候,每次只有发送1k的数据,速度很慢,但是从服务器向客户端发送时,发送速度会快很多,我在客服端和服务器端都设置了最大最小的读取缓存,求大神解答这是为什么?` 解决方案 mina单独没有用过 但是用过它和xmpp协议传输数据 传输的是string串 你可以试试 将这些字节转成string试试看 解决方案二: 不贴下主要函数的代码?

java实现日期拆分的方法_java

本文实例讲述了java实现日期拆分的方法.分享给大家供大家参考.具体如下: 如:计算6-1至6-5之间的日期天数及具体日期,预期的结果是得到: 6-1 6-2 6-3 6-4 6-5 以下是我利用java 日历类做的实现: Calendar canlandar1 = Calendar.getInstance();//开始时间 Calendar canlandar2 = Calendar.getInstance();//结束时间 canlandar1.setTime(psd);//2009-6-1

android-关于java一个事件的问题

问题描述 关于java一个事件的问题 java中一个事件的发生就相当于一个对象(实例的初始化)吗?如果是的话,那么它和普通类的对象有什么区别? 解决方案 事件发生和对象创建有什么关系吗? 我觉得根据事件监听机制,事件触发后就是执行个外部方法或者类方法啊~ 解决方案二: java:java中一个最简单的事件练习,-Java序列化的一个问题 解决方案三: java中有事件这个专有名词吗?

java中split拆分字符串函数用法

经常需要用java拆分字符串如1,2,3,4 tom,jim,andy,han 1.语法如下 String.split(sourceStr,maxSplit) String.split(sourceStr) 参数说明:sourceStr是被分割的字符串,maxSplit是最大的分割数 返回值说明:split函数的返回值是一个字符串数组String[] 例子  代码如下 复制代码 package com.java.lang;   public class StringSp {    /**   *