gpt4 book ai didi

java - java 是否具有相当于 mysql 的数组列表限制和偏移量?

转载 作者:行者123 更新时间:2023-11-29 03:59:34 25 4
gpt4 key购买 nike

在 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:

it should spit out 1,2,3

如果偏移量 = 3:

4,5,6

偏移量 = 6:

7,8,9

偏移量 = 9:

10,11

我目前的做法是创建列表的子列表:

int endOf = offset+3;
ArrayList<String> ids2 = new ArrayList<String>(ids.subList(offset, endOf));

但是当偏移量大于 ids 的大小时它会中断......

如果这不能用数组列表来完成,是否有更好的方法来做到这一点?

编辑:

根据这两个答案,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

编辑 2:

绝不应依赖上述基准测试。有关详细信息,请参阅此处:How do I write a correct micro-benchmark in Java?

最佳答案

这可以通过流来完成:

List<Integer> result = 
ids.stream()
.skip(0) // Equivalent to SQL's offset
.limit(3) // Equivalent to SQL's limit
.collect(Collectors.toList());

关于java - java 是否具有相当于 mysql 的数组列表限制和偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50786659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com