结果模型
- 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;
}