根据指定条件拆分List

结果模型

  • List数据为【100,150,300】
  • 按100分度拆分成【100,100,50,100,100,100】
private static List<Integer> addList(List<Integer> initList) {
    int s = 1;
    for (int i = initList.size() - s; i >= 0; i--) {
        int t = initList.get(i);
        if (t >= 100) {
            int l = t / 100;
            if (t % 100 > 0) {
                l = l + 1;
            }
            int z = 0;
            for (int j = 0; j < l; j++) {
                z = 100;
                if (j == l - 1)
                    z = t - (100 * j);
                if (j == 0)
                    initList.remove(i);
                initList.add(i + j, z);
            }
            s += l;
        }
    }
    return initList;
}

测试代码

List<Integer> list = new ArrayList<Integer>();
list.add(100);
list.add(150);
list.add(300);
for (Integer integer : list) {
    System.out.println(integer);
}
list = addList(list);
System.out.println(list);

下面我们来对上面的逻辑进行改造(实际对象)

Person对象

import java.io.Serializable;
import java.util.Date;

/**
 * 一个简单的JavaBean
 * 
 * @author aming
 *
 */
public class Person implements Serializable, Cloneable {
// 被复制的类需要实现Clonenable接口
    private static final long serialVersionUID = 1L;

    /**
     * 姓名
     */
    private String name;

    /**
     * 年龄
     */
    private int age;

    /**
     * 性别
     */
    private Gender gender;

    /**
     * 生日
     */
    private Date birthday;

    /**
     * 资产
     */
    private double assets;

    /**
     * 是否结婚
     */
    private boolean married;

    // 。。。省略getter和setter方法

    public Person() {
        super();
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", birthday=" + birthday + ", assets="
                + assets + ", married=" + married + "]";
    }

    @Override
    public Person clone() {
        Person person = null;
        try {
            person = (Person) super.clone();
        } catch (CloneNotSupportedException e) {
            person = new Person();
            e.printStackTrace();
        }
        return person;
    }

}
/**
 * 按某个条件拆分List
 * @param initList 待拆分的集合
 * @param limit 查分的精度
 * @return
 */
private static List<Person> addList(List<Person> initList,double limit) {
    int s = 1;
    for (int i = initList.size() - s; i >= 0; i--) {
        Person person = initList.get(i);
        double assets = person.getAssets();
        if (assets > limit) {
            int l = (int) Math.ceil(assets/limit );
            for (int j = 0; j < l; j++) {
                person.setAssets(limit);
                if (j == l - 1) {person.setAssets(assets-(limit*j));}
                if (j == 0) initList.remove(i);
                /*  List保存数据时,保存的是内存地址,因为这里使用的是add(int index, E element)方法,
                    虽然保存了相同对象,但是当对象属性改变时,所有相同属性会被覆盖,暂时只想到克隆   */
                initList.add(i + j, person.clone());  
            }
            s += l;
        }
    }
    return initList;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、生命周期 一个事物一旦出生,就必然会长大,变异,一旦长大,就面临着衰老,接下来就是消亡了,这个过程就称为一个事...
    ZyBlog阅读 2,684评论 1 11
  • 苏轼是我们在很久以前就了解的一个诗人,几乎每个时间段的语文课上都有他的踪迹,6集的纪录片,分别从不同的方面分时间段...
    最好的我们_9435阅读 639评论 0 1
  • 今天窗外雨声滴答,天气又冷起来了,特别想睡觉了,就想今天偷个懒,不写日更了!我很喜欢下雨,听雨声嗒嗒,觉得...
    冬天的花1阅读 175评论 2 6
  • 了解更多,请关注我的微信公众号:mellong 设置背景图片 修改文字边距 设置好图片后输入文字会发现左边的文字和...
    Mellong阅读 6,153评论 0 9
  • 海上日出 淩晨五点十分,秦皇岛的初秋己有微微的凉意,吹面不寒的海风,还是让丝丝清冷扑进了怀里。管干院格外安静,只有...
    笙箫红尘阅读 348评论 1 2