一个页面 数据来自2个集合的拼装
集合为A,B
每页最多能只能显示N
A集合的数据优先显示,并且为每页显示最多为6条
B集合的数据显示比A弱点,并且B集合每页显示的数据为A显示之后剩下的,具体的为:
在某一页,A显示的数据+B显示的数据=15;
举例一:
A集合里面有10条数据
B集合里面有20条数据
那么,第一页,A显示1-6,B显示,1-9
      第二页,A显示7-10,B显示,10-20
举例二:
A集合里面有5条数据
B集合里面有20条数据
那么,第一页,A显示1-5,B显示,1-10
      第二页,A没有,B显示,11-20写一个通用的方法谢谢我要稍微好一点的

解决方案 »

  1.   

    一般取集合数据是通过
    start,pagerecordstart是指针位置
    pagerecord为取几条和mysql取数据类似start默认为1
      

  2.   

    int max = 15;
    int max_A = 6;

    int A = 5;
    int B = 50;

    int page = 1;
    while(A>0||B>0){
    Integer AA = new Integer(A>0?(A>max_A?max_A:A):0);
    Integer BB = new Integer(B>0?(B>max-AA.intValue()?max-AA.intValue():B):0);
    A -= AA.intValue();
    B -= BB.intValue();
    System.out.println("page "+page+"\tA:"+AA.intValue()+"\tB:"+BB.intValue());
    }
      

  3.   

    final int COUNT_ALL=15;//假设总共最多取出15条
    final int COUNT_A=5;//假设最多从集合A中取出5条List A,B;//应该作为参数传入
    int lPage=1;//从第二页开始,第一页为0,如果是Start参数,则应该能被COUNT_ALL整除int lIndexA=lPage*COUNT_A,lIndexB;//lIndexA,lIndexB分别为从集合A,B中取数据的开始序号
    int lSizeA=A.size();//多次用到,取出一次
    if(lIndexA>=lSizeA){
    lIndexA=-1;//-1表示不从集合A中取数据
    lIndexB=lPage*COUNT_ALL-lSizeA;
    }else{
    lIndexB=lPage*COUNT_ALL-lIndexA;
    }
    //需要注意lIndexB不应该大于B.size()
      

  4.   

    public List getPage(List listA,List listB,int curPage,int pageSize,int aSize,int bSize){
            int start=(curPage-1)*pageSize;
            if(listA.size()+listB.size()<=start) return Collections.EMPTY_LIST;
            List ret=new ArrayList();
            int s1=(curPage-1)*aSize;
            if(s1<listA.size()){
                ret.addAll(listA.subList(s1,Math.min(s1+aSize,listA.size())));
            }
            int s2=start-Math.min(s1+ret.size(),listA.size())+ret.size();
            if(s2<listB.size())
                ret.addAll(listB.subList(s2,Math.min(listB.size(),s2+pageSize-ret.size())));
            return ret;
        }没有仔细测试