b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

工具类源码结语希望对你有所帮助!!

电脑杂谈  发布时间:2021-05-23 17:04:12  来源:网络整理

前言

在工作过程中,我们经常遇到基于内存数据的分页处理,例如当进行批量更新时,集合太大而需要分批更新,例如,中的集合数据缓存是通过分页获得的。发生。

本文提供了常规的内存分页工具,参考了Internet上的一些代码,主要是基于subList()方法实现的,希望对您有所帮助!该工具的源代码在本文的底部。

本文原始文本的链接地址:%E5%86%85%E5%AD%98%E5%88%86%E9%A1%B5%E5%B7%A5%E5%85%B7 %E7%B1%BB .html

优化之前

首先,让我们看一下要满足这些要求的代码是如何实现的。

// 分页进行批量更新
private void batchUpdateStudent(List students) {
    int limit = 100;
    int size = students.size();
    int m = size / limit;
    int n = size % limit;
    for (int i = 1; i <= m; i++) {
        List list = students.subList((i - 1) * limit, i * limit);
        studentDao.batchUpdate(list);
    }
    if (n != 0) {
        List list = students.subList(m * limit, students.size());
        studentDao.batchUpdate(list);
    }
}
// 分页获取数据
public List pageStudents(Integer page, Integer pageSize) {
    if (page < 1) {
        page = 1;
    }
    int start = (page - 1) * pageSize;
    int limit = page * pageSize;
    // 从缓存中获取全量数据
    List students = studentCache.getStudents();
    if (CollectionUtils.isEmpty(students)) {
        return new ArrayList<>();
    }
    if (limit > students.size()) {
        limit = students.size();
    }
    return students.subList(start, limit), students.size();
}

native内存 java_java 内存_java翻页数据内存

可以看出,该方法的代码是相对多余的。如果需要多个内存分页,则不可避免地会有很多重复的代码!

优化后

// 分页进行批量更新
private void batchUpdateStudent(List students) {
	RAMPager pager = new RAMPager<>(students, 100);
	// 方式一:使用迭代器
	Iterator> iterator = pager.iterator();
	while (iterator.hasNext()) {
		studentDao.batchUpdate(iterator.next());
	}
	// 方式二:使用索引
	//for (int i = 1; i <= pager.getPageCount(); i++) {
	//	studentDao.batchUpdate(pager.page(i));
	//}
}
// 分页获取数据
public List pageStudents(Integer page, Integer pageSize) {
	// 从缓存中获取全量数据
	List students = studentCache.getStudents();
	RAMPager pager = new RAMPager<>(students, pageSize);
	return pager.page(page);
}

java 内存_java翻页数据内存_native内存 java

注意:如果仅用于分页,则无需注意页码,只需使用迭代器即可。

工具源代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
 * 类名称:RAMPager
 * 类描述:内存分页工具
 * 创建人:WeJan
 * 创建时间:2019年07月22日 13:43
 * Version: 1.1
 */
public class RAMPager {
    private List data;
    private int pageSize;
    /**
     * @param data     原始数据
     * @param pageSize 每页条数
     */
    public RAMPager(List data, int pageSize) {
        this.data = data;
        this.pageSize = pageSize;
    }
    /**
     * 获取某页数据,从第1页开始
     *
     * @param pageNum 第几页
     * @return 分页数据
     */
    public List page(int pageNum) {
        if (pageNum < 1) {
            pageNum = 1;
        }
        int from = (pageNum - 1) * pageSize;
        int to = Math.min(pageNum * pageSize, data.size());
        if (from > to) {
            from = to;
        }
        return data.subList(from, to);
    }
    /**
     * 获取总页数
     */
    public int getPageCount() {
        if (pageSize == 0) {
            return 0;
        }
        return data.size() % pageSize == 0 ? (data.size() / pageSize) : (data.size() / pageSize + 1);
    }
    /**
     * 元素迭代器
     */
    public Iterator> iterator() {
        return new Itr();
    }
    private class Itr implements Iterator> {
        int page = 1;
        Itr() {
        }
        public boolean hasNext() {
            return page <= getPageCount();
        }
        public List next() {
            int i = page;
            if (i > getPageCount())
                return new ArrayList<>();
            page = i + 1;
            return RAMPager.this.page(i);
        }
    }
    public static void main(String[] args) {
        List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
        System.out.println("原始数据是:" + list);
        int pageSize = 2;
        System.out.println("每页大小是:" + pageSize);
        RAMPager pager = new RAMPager<>(list, pageSize);
        System.out.println("总页数是: " + pager.getPageCount());
        System.out.println("<- - - - - - - - - - - - - ->");
        // 无需感知页码情况下使用
        Iterator> iterator = pager.iterator();
        while (iterator.hasNext()) {
            List next = iterator.next();
            System.out.println("next: " + next);
        }
        System.out.println("<- - - - - - - - - - - - - ->");
        // 需要指定页码情况使用,页码从第一页开始,且小于等于总页数!
        for (int i = 1; i <= pager.getPageCount(); i++) {
            List page = pager.page(i);
            System.out.println("第 " + i + " 页数据是:" + page);
        }
    }
}

结论

希望对您有用〜


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-377559-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 杨明杰
        杨明杰

        没有发财的

      • 杨玉梅
        杨玉梅

        那种军舰的什么发动机造不出来

      • 周芳芳
        周芳芳

        注定了三哥只能当个三流国家

      热点图片
      拼命载入中...