С помощью hibernate я приведу список результатов из таблицы образцов ANIMALS
. Метод спящего режима выглядит следующим образом:Разбиение списка по нескольким условиям
...
List<Animals> animalList= null;
try {
Query query = session.createQuery("SELECT * FROM animals ORDER BY COLOR , HEIGHT , AGRESSIVE; ");
animalList= query.list();
}
...
Пример набора результатов будет следующим:
NAME COLOR HEIGHT AGRESSIVE
---------------------------------
JIMMY BLACK SHORT NO
RIPPER BLACK SHORT YES
GOOFY BLACK TALL NO
MURPHY BLACK TALL YES
PAUL WHITE SHORT NO
ROB WHITE SHORT YES
BOBBY WHITE TALL NO
JACK WHITE TALL YES
Мой фактический список результатов имеет минимум 100000 записей так разборе список и исполняющих list.add(..)
для каждый не очень мудр; Что бы я хотел сделать, это разбить набор результатов на 8 небольших списков, содержащих каждую комбинацию COLOR
, HEIGHT
и AGGRESSIVE
. После этого списки будут переданы в качестве параметра методу для выполнения ряда операций.
Я могу использовать только Java 1.6 или ниже. Моя главная цель уйти от IndexOutOfBounds
мер я взял и сумасшедшей суммой в IF's
, как следующее:
for (int i = 0; i < animalList.size(); i++) {
previousAnimal = animals.get(i-1);
currentAnimal = animals.get(i);
nextAnimal = animals.get(i+1);
...//extra code
IF (previousAnimal.getColor() != currentAnimal.getColor() || previousAnimal.getHeight() != currentAnimal.getColor() || previousAnimal.getAgressive() != currentAnimal.getAgressive())
...//extra code
IF (currentAnimal.getColor() != nextAnimal.getColor() || currentAnimal.getHeight() != nextAnimal.getColor() || currentAnimal.getAgressive() != nextAnimal.getAgressive())
...//extra code
Если вы используете Java 8, вы можете сделать это с помощью Stream API. Если вы используете Java 7 или ранее, используйте библиотеку типа quaere или аналогичную. –
Отфильтруйте запрос, вы можете использовать Критерии критериев API – santiago92
Или поместить все в «MultiMap» и использовать ключ, который является кортежем ваших свойств с последовательным методом 'hascode()'. – dotvav