零、背景
最近在做数据迁移
为了加速迁移速度
其中就需要把查询到的数据( max 100 条)
拆分成 5 份,然后执行 5 个子任务,加速处理
一、代码
1.1 常规做法
1 | public static <T> List<List<T>> split2(List<T> lists, int subCount) { |
1.2 新颖做法
1 | public static <T> List<List<T>> split(List<T> lists, int subCount) { |
三、性能
3.1 结果
从结果可以看出,一味地追求新颖也不是好事,需要知其然
java 8 的 stream 并不占优势,性能相差好几个数量级…
1 | Benchmark Mode Cnt Score Error Units |
3.3 压测代码
压测教程:JMH 使用参考
1 | import com.google.api.client.util.Lists; |
四、后话
其中不错的一点我觉得是
1 | int splitTimes = (lists.size() + subCount - 1) / subCount; |
这样巧妙的计算,避免了先取模,后判断是否有余数的繁杂。
这个不是我想到的,也不知道怎么通过数学证明,但是这样就是对的 ==
ps:是谁说数学没用的 ????