美文网首页
根据指定条件拆分List

根据指定条件拆分List

作者: Hey_Shaw | 来源:发表于2018-03-01 15:05 被阅读80次

    结果模型

    • 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;
    }
    

    相关文章

      网友评论

          本文标题:根据指定条件拆分List

          本文链接:https://www.haomeiwen.com/subject/deigxftx.html