根据指定条件拆分List

2018-03-01  本文已影响80人  Hey_Shaw

结果模型

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;
}
上一篇下一篇

猜你喜欢

热点阅读