### Question:
IndexedElement { public static <T> void addInOrder(List<IndexedElement<T>> indexedElements, IndexedElement<T> element) { boolean pinned = element.isPinned(); int index = element.getIndex(); int insertIndex = 0; IndexedElement currentElement; final Iterator<IndexedElement<T>> it = indexedElements.iterator(); boolean found = false; while (!found && it.hasNext()) { currentElement = it.next(); if (pinned && currentElement.isPinned()) { found = (index >= 0) && (currentElement.getIndex() < 0 || index < currentElement.getIndex()); } else if (pinned && !currentElement.isPinned()) { found = true; } else if (!pinned && !currentElement.isPinned()) { found = (index >= 0) && (currentElement.getIndex() < 0 || index < currentElement.getIndex()); } insertIndex = !found ? insertIndex + 1 : insertIndex; } indexedElements.add(insertIndex, element); } IndexedElement(T element, int index, boolean pinned); T getElement(); int getIndex(); boolean isPinned(); static void addInOrder(List<IndexedElement<T>> indexedElements, IndexedElement<T> element);  }### Answer:
@Test public void addInOrder() { String element1 = "1"; String element2 = "2"; String element3 = "3"; String element4 = "4"; String element5 = "5"; String element6 = "6"; String element7 = "7"; List<IndexedElement<String>> elements = new ArrayList<>(); IndexedElement.addInOrder(elements, new IndexedElement<>(element1, 4, true)); IndexedElement.addInOrder(elements, new IndexedElement<>(element2, 1, true)); IndexedElement.addInOrder(elements, new IndexedElement<>(element3, -1, true)); IndexedElement.addInOrder(elements, new IndexedElement<>(element4, 2, false)); IndexedElement.addInOrder(elements, new IndexedElement<>(element5, 3, true)); IndexedElement.addInOrder(elements, new IndexedElement<>(element6, -1, false)); IndexedElement.addInOrder(elements, new IndexedElement<>(element7, 1, false)); assertEquals(element2, elements.get(0).getElement()); assertEquals(element5, elements.get(1).getElement()); assertEquals(element1, elements.get(2).getElement()); assertEquals(element3, elements.get(3).getElement()); assertEquals(element7, elements.get(4).getElement()); assertEquals(element4, elements.get(5).getElement()); assertEquals(element6, elements.get(6).getElement()); }