【发布时间】:2018-11-20 01:12:49
【问题描述】:
在 MySQL 中你可以这样做:
select * from sometable order by id desc limit 3 offset 0;
这将返回前 3 个结果。在java中如何实现这样的事情?
如果我有一个奇数元素的ArrayList:
ArrayList<String> ids = new ArrayList<String>();
ids.add("1");
ids.add("2");
ids.add("3");
ids.add("4");
ids.add("5");
ids.add("6");
ids.add("7");
ids.add("8");
ids.add("9");
ids.add("10");
ids.add("11");
如何从这个ArrayList 中为每个偏移量只获得 3 个结果(或者如果没有更多元素,则少于 3 个)?
例如,假设限制总是 3 和offset = 0:
它应该吐出 1,2,3
if offset = 3:
4,5,6
offset = 6:
7,8,9
offset = 9:
10,11
我目前的做法是创建列表的子列表:
int endOf = offset+3;
ArrayList<String> ids2 = new ArrayList<String>(ids.subList(offset, endOf));
但是当偏移量大于id的大小时它会中断......
如果数组列表不能做到这一点,有没有更好的方法来做到这一点?
编辑:
基于这两个答案,Andy 的方法似乎表现更好:
long startTime = System.nanoTime();
//tried each method here
long stopTime = System.nanoTime();
System.out.println(stopTime - startTime);
没有流:
40960
17167
13854
10240
使用流:
303584
118060
47284
40357
EDIT2:
绝对不应依赖上述基准测试。欲了解更多信息,请参见此处:How do I write a correct micro-benchmark in Java?
【问题讨论】:
-
如果你使用 Guava,你也可以使用
Lists.partition。 -
你的基准测试太天真了。请看:stackoverflow.com/questions/504103/…
标签: java mysql list limit offset