Как перебрать по приоритету? - PullRequest
1 голос
/ 21 марта 2019

В Java, скажем, у меня есть класс с именем ExampleClass, который имеет коллекцию класса с именем Item.Каждый элемент имеет целое число в поле с именем ID.Как я могу сделать, чтобы итератор ExampleClass перебирал элементы с четными идентификаторами, а затем перебирал элементы с нечетными идентификаторами.

Редактировать: мне не нужен ответ на эту конкретную проблему, я обычно спрашиваю, как получитьвнутренний класс Iterator в ExampleClass, который будет перебирать элементы с одним свойством, а затем через другие.

Ответы [ 3 ]

0 голосов
/ 21 марта 2019

Вот два способа сделать это с 1 вкладышем.

final Iterator<Item> it = items.stream().filter(i.getID() % 2 == 0).iterator();

или

for (final Item i : items.stream().filter(i.getID() % 2 == 0).toArray())
     doSomethingWith(i);
0 голосов
/ 21 марта 2019

Если вам нужно перебрать их в каком-то определенном порядке, вам нужно будет упорядочить массив элементов, прежде чем вы их просматриваете. Как вы поступите, зависит от вашего приложения и потребностей в заказе. Я предлагаю что-то похожее на псевдокод:

unsortedArray[]
sortedArray[]

for (every element in unsortedArray) {
    id = element.ID; //Or sort value calculated with some other method
    sortedIndexBeforeID = sortedArray.findLastElementWithIDBelow(id); //Get the index of sorted element with an ID just before ours.
    sortedArray.insert(element,sortedIDBeforeID); //Add the element into the sorted array at given index, pushing the rest of the elements around
}

sortedArray[]
0 голосов
/ 21 марта 2019

Вы можете использовать следующее условие if для проверки, является ли идентификатор нечетным или нет:

for(int i = 0;i < maxID;i++) { //I'm not sure what your maximum ID is.
  if(Item.ID % 2 == 0) {
    //Iterate
  }
}

Затем вы можете сделать то же самое для нечетных идентификаторов:

for(int i = 0;i < maxID;i++) { //I'm not sure what your maximum ID is.
  if(Item.ID % 2 == 1) {
    //Iterate
  }
}

Код Item.ID % 2 делит идентификатор на 2 и возвращает остаток. В операторе if он проверяет, равен ли остаток 0. Если это так, то идентификатор четен, и он запускает нужный код. Однако, если остаток равен 1, то число нечетное.

Пример: 4 / 2 = 2. Остаток равен 0. Следовательно, число 4 является четным.

Пример: 5 / 2 = 2. Остаток равен 1. Следовательно, число 5 нечетно.

...