zoukankan      html  css  js  c++  java
  • 根据start和limit从已有的数据列表中获取从start开始的limit个数据

    代码记录(需求:根据start和limit从已有的数据列表中获取从start开始的limit个数据)

    已有的数据列表:这个数据列表是经过处理的,可能是在SQL查询时无法处理的如多条件排序,而排序条件需要重新计算才能得到。

    实体类Store.java

    package com.zhipengs.work.test;
    
    import java.io.Serializable;
    
    /**
     * 实体类Store
     * 
     * @author zhipengs
     */
    public class Store implements Serializable {
        private static final long serialVersionUID = 8799004943860173845L;
        private Long storeId;
        private String storeName;
        private String longitude;
        private String latitude;
        private String storeLogo;
    
        public Store(Long storeId, String storeName, String longitude,
                String latitude, String storeLogo) {
            super();
            this.storeId = storeId;
            this.storeName = storeName;
            this.longitude = longitude;
            this.latitude = latitude;
            this.storeLogo = storeLogo;
        }
    
        public Long getStoreId() {
            return storeId;
        }
    
        public void setStoreId(Long storeId) {
            this.storeId = storeId;
        }
    
        public String getStoreName() {
            return storeName;
        }
    
        public void setStoreName(String storeName) {
            this.storeName = storeName;
        }
    
        public String getLongitude() {
            return longitude;
        }
    
        public void setLongitude(String longitude) {
            this.longitude = longitude;
        }
    
        public String getLatitude() {
            return latitude;
        }
    
        public void setLatitude(String latitude) {
            this.latitude = latitude;
        }
    
        public String getStoreLogo() {
            return storeLogo;
        }
    
        public void setStoreLogo(String storeLogo) {
            this.storeLogo = storeLogo;
        }
    
        @Override
        public String toString() {
            return "Store [storeId=" + storeId + ", storeName=" + storeName
                    + ", longitude=" + longitude + ", latitude=" + latitude
                    + ", storeLogo=" + storeLogo + "]";
        }
    
    }

    工具类DataStartLimitUtil.java

    package com.zhipengs.work.test;
    
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 写成工具类DataStartLimitUtil
     * 
     * @author zhipengs
     */
    public class DataStartLimitUtil {
    
        public static List<Object> getLimitSampleStores(Integer start,
                Integer limit, List<Object> data) {
            System.out.println("start=" + start + "  limit=" + limit);
            List<Object> dataReturn = new ArrayList<Object>();
            // 如果data为null,直接返回或者获取数据的起始位置大于等于data的大小则返回null
            if (null == data || data.size() <= start) {
                return null;
            }
            // 计算需要取data数据的最后一个位置loop,start为起始位置,共取limit个
            int loop = start + limit;
            // 如果data的大小大于等于获取数据的其实位置的同时又小于需要取得data数据的最后一个位置数loop,则将loop重置为data的大小
            if (data.size() >= start && data.size() < loop) {
                loop = data.size();
            }
            // 循环遍历获取data中第start个位置到第loop个位置的数据,放入新的列表中并返回
            for (int i = start; i < loop; i++) {
                dataReturn.add(data.get(i));
            }
            return dataReturn;
        }
    }

    测试类MainTest.java

    package com.zhipengs.work.test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    /**
     * 测试
     * 
     * @author zhipengs
     */
    public class MainTest {
        @SuppressWarnings("unused")
        public static void main(String[] args) {
            List<Object> storeRerurnList = null;
            List<Object> storeList = null;
            Store store = null;
            
            // storeList为null
            storeRerurnList = DataStartLimitUtil.getLimitSampleStores(0, 21, storeList);
            System.out.println("storeList为null,返回的数据列表:"+storeRerurnList);
            System.out.println("------------------------------------------------------");
            
            // 往storeList中存入20条数据
            storeList = new ArrayList<Object>();
            for (int i = 0; i < 20; i++) {
                store = new Store((long) i+1, "_store_", "113.85786457474","23.7635746576", "mobile/"
                                + Math.abs(new Random().nextInt()) + ".jpg");
                storeList.add(store);
            }
            
            // 获取数据的起始位置大于等于storeList的size
            storeRerurnList = DataStartLimitUtil.getLimitSampleStores(20, 1, storeList);
            System.out.println("获取数据的起始位置大于等于storeList的size,返回的数据列表:"+storeRerurnList);
            System.out.println("------------------------------------------------------");
            
            // storeList的size大于等于获取数据的起始位置的同时又小于需要取得data数据的最后一个位置数
            storeRerurnList = DataStartLimitUtil.getLimitSampleStores(0, 25, storeList);
            System.out.println("storeList有20条数据,从0取25条,storeRerurnList.size(): " + storeRerurnList.size());
            System.out.println("storeList有20条数据,从0取25条,第一条"+storeRerurnList.get(0));
            System.out.println("------------------------------------------------------");
            
            storeRerurnList = DataStartLimitUtil.getLimitSampleStores(5, 25, storeList);
            System.out.println("storeList有20条数据,从5取25条,storeRerurnList.size(): " + storeRerurnList.size());
            System.out.println("storeList有20条数据,从5取25条,第一条"+storeRerurnList.get(0));
            
            // 正常获取数据
            System.out.println("---------------------循环获取所有数据---------------------");
            for(int i=0;i<25;i+=5) {
                storeRerurnList = DataStartLimitUtil.getLimitSampleStores(i, 5, storeList);
                if(null == storeRerurnList) {
                    System.out.println(storeRerurnList);
                } else {
                    System.out.println("storeList有20条数据,从"+i+"取5条,storeRerurnList.size(): " + storeRerurnList.size());
                    System.out.println("storeList有20条数据,从"+i+"取5条,第一条"+storeRerurnList.get(0));
                    System.out.println("------------------------------------------------------");
                }
                
            }
            
            /*
             * for(Object o : storeRerurnList) { if(o instanceof Store) {
             * System.out.println((Store)o); } }
             */
    
        }
    }

    测试结果:

    start=0 limit=21
    storeList为null,返回的数据列表:null
    ------------------------------------------------------
    start=20 limit=1
    获取数据的起始位置大于等于storeList的size,返回的数据列表:null
    ------------------------------------------------------
    start=0 limit=25
    storeList有20条数据,从0取25条,storeRerurnList.size(): 20
    storeList有20条数据,从0取25条,第一条Store [storeId=1, storeName=_store_, longitude=113.85786457474, latitude=23.7635746576, storeLogo=mobile/1455388787.jpg]
    ------------------------------------------------------
    start=5 limit=25
    storeList有20条数据,从5取25条,storeRerurnList.size(): 15
    storeList有20条数据,从5取25条,第一条Store [storeId=6, storeName=_store_, longitude=113.85786457474, latitude=23.7635746576, storeLogo=mobile/335472957.jpg]
    ---------------------循环获取所有数据---------------------
    start=0 limit=5
    storeList有20条数据,从0取5条,storeRerurnList.size(): 5
    storeList有20条数据,从0取5条,第一条Store [storeId=1, storeName=_store_, longitude=113.85786457474, latitude=23.7635746576, storeLogo=mobile/1455388787.jpg]
    ------------------------------------------------------
    start=5 limit=5
    storeList有20条数据,从5取5条,storeRerurnList.size(): 5
    storeList有20条数据,从5取5条,第一条Store [storeId=6, storeName=_store_, longitude=113.85786457474, latitude=23.7635746576, storeLogo=mobile/335472957.jpg]
    ------------------------------------------------------
    start=10 limit=5
    storeList有20条数据,从10取5条,storeRerurnList.size(): 5
    storeList有20条数据,从10取5条,第一条Store [storeId=11, storeName=_store_, longitude=113.85786457474, latitude=23.7635746576, storeLogo=mobile/1985193589.jpg]
    ------------------------------------------------------
    start=15 limit=5
    storeList有20条数据,从15取5条,storeRerurnList.size(): 5
    storeList有20条数据,从15取5条,第一条Store [storeId=16, storeName=_store_, longitude=113.85786457474, latitude=23.7635746576, storeLogo=mobile/1439772159.jpg]
    ------------------------------------------------------
    start=20 limit=5
    null

  • 相关阅读:
    Windows Server 2003 SP2(32位) 中文版 下载地址 光盘整合方法
    用Recycle()方法对Java对象的重要性
    Lotus中千奇百怪的 $$
    Developing a simple application using steps "User Decision" and "Mail"(1) 沧海
    沟通中的情绪管理(演讲稿) 沧海
    人只有在压力之下,才可能成功,没做一件事,都必须成功,不许言败 沧海
    什么是IDOC,以及IDOC的步骤 沧海
    VS2008 Professional Edition CHS中的deffactory.dat读取错误 沧海
    Including custom text in the step "User Decision" 沧海
    SAP Upgrade Strategy 沧海
  • 原文地址:https://www.cnblogs.com/once/p/3625366.html
Copyright © 2011-2022 走看看