В 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");
Как можно получить только 3 результата из этого ArrayList
для каждого смещения (или меньше, чем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));
Но он ломается, когда смещение больше, чем размер идентификаторов ...
Если это невозможно сделать с массивами, есть лучший способсделать это?
РЕДАКТИРОВАТЬ:
Судя по двум ответам, метод Энди, кажется, работает лучше:
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:
Приведенный выше тест производительности ни в коем случае не sследует полагаться.Для получения дополнительной информации см. Здесь: Как написать правильный микро-тест на Java?