У меня есть простой список книг, как этотсравнить элементы в ListIterator
mItems.add("Steve Jobs");
mItems.add("Inheritance (The Inheritance Cycle)");
mItems.add("The Hunger Games");
mItems.add("The LEGO Ideas Book");
mItems.add("Catching Fire (The Second Book of the Hunger Games)");
mItems.add("Death Comes to Pemberley");
mItems.add("Diary of a Wimpy Kid 6: Cabin Fever");
mItems.add("Explosive Eighteen: A Stephanie Plum Novel");
mItems.add("Elder Scrolls V: Skyrim: Prima Official Game Guide");
Я хочу, чтобы преобразовать список в алфавитном порядке путем добавления заголовка при запуске следующей книги с другой буквой
Так окончательный список должен быть, как этот
- C
- воспламеняться (Вторая книга Голодные игры)
- D
- Смерть приходит к Пемберли
- Дневник слабака 6: Лихорадка
- E
- Elder Scrolls V: Skyrim: Руководство Prima Official Game
- Взрывоопасные Восемнадцать: A Стефани Плам Роман
- Я
- Наследование (Наследование цикла)
Etc ...
Очевидно мне нужно сравнить следующий и предыдущий пункт, поэтому я использовал ListIterator
mItems = new ArrayList<String>();
mItems.add("Steve Jobs");
mItems.add("Inheritance (The Inheritance Cycle)");
mItems.add("The Hunger Games");
mItems.add("The LEGO Ideas Book");
mItems.add("Catching Fire (The Second Book of the Hunger Games)");
mItems.add("Death Comes to Pemberley");
mItems.add("Diary of a Wimpy Kid 6: Cabin Fever");
mItems.add("Explosive Eighteen: A Stephanie Plum Novel");
mItems.add("Elder Scrolls V: Skyrim: Prima Official Game Guide");
Collections.sort(mItems);
ArrayList<Book> books= new ArrayList<Book>();
int position = 0;
boolean isSeparator = false;
ListIterator<String> it = mItems.listIterator();
while(it.hasNext()) {
isSeparator = false;
String name = it.next();
char[] nameArray;
// If it is the first item then need a separator
if (position == 0) {
isSeparator = true;
nameArray = name.toCharArray();
}
else {
// Get the previous book's name
String previousName = it.previous();
// Convert the previous and current book names
// into char arrays
char[] previousNameArray = previousName.toCharArray();
nameArray = name.toCharArray();
// Compare the first character of previous book and current book,
if (nameArray[0] != previousNameArray[0]) {
isSeparator = true;
}
// go next item
it.next();
}
// item is a separator
if (isSeparator) {
Book book= new Contact(String.valueOf(nameArray[0]), null, isSeparator);
books.add(book);
}
// Create a Book object to store the name and if it's a separator or not
Book book= new Book (name, null, false);
books.add(book);
position++;
}
Проблема заключается в том, что итератор не работает таким образом, потому что следующий() и предыдущий() метод переходит в следующую/предыдущую итерацию. Они не получают следующее/предыдущее значение, оставаясь в одной и той же итерации
Все советы? Большое спасибо
Сумасшедшая идея - почему бы не вы добавляете заглавные буквы в список перед сортировкой? Если мои серверы памяти правы, одна буква будет помещена перед любой строкой, начинающейся с той же буквы. –