#java #spring #spring-boot
Вопрос:
Я пытаюсь повторить список в обратном порядке по определенному индексу.
Мой список выглядит примерно так, например: 4 5 8 7
Что я хочу сделать, так это пройти список в обратном направлении от любого индекса, в котором находится 8. Таким образом, мой новый список будет выглядеть примерно так: 8 5 4 7.
for(int j = newPlayerList.size(); j >= maxIndex; j--) {
newPlayerList2.add(newPlayerList.get(j % newPlayerList.size()));
} //max index is the index of the highest number in the list, i already store this in a different function
Это то, что у меня есть до сих пор. Мой заказ не сохраняется должным образом, и я как бы теряюсь в том, куда идти дальше.
Спасибо за помощь.
Комментарии:
1. Спасибо за ответы, ребята. Моя реализация была примерно такой: для(int j = 0; j Застрял на этом почти на 4 часа.
Ответ №1:
Вы можете использовать Collections.rotate
в сочетании Collections.reverse
с без необходимости нового списка или цикла for:
public static void main(String[] args) {
//original: 4 5 8 7
//expected: 8 5 4 7
List<Integer> mylist = new ArrayList<>(Arrays.asList(4,5,8,7));
System.out.println("Original List : " mylist);
int distance = mylist.indexOf(8) 1;
Collections.reverse(mylist);
Collections.rotate(mylist, distance);
System.out.println("Rotated List: " mylist);
}
Комментарии:
1. но если «индекс» будет целочисленным полем в отсортированном классе, например. «PlayerEntity», метод сравнения может быть проще в развертывании.
2. Не могли бы вы уточнить? У меня есть целое поле, сопоставленное с полем в классе игрока. Я просто не знал, как повернуть раздражающий список в индексе.
Ответ №2:
Похоже, это то, что ты пытаешься сделать:
for (int j = maxIndex; j >= 0; j--) {
newPlayerList2.add(newPlayerList.get(j));
}
for (int j = newPlayerList.size() - 1; j > maxIndex; j--) {
newPlayerList2.add(newPlayerList.get(j));
}
Ответ №3:
У меня нет опыта работы с лямбдами, потоками, но, пожалуйста, попробуйте этот метод:
private static List<Integer> iterateListByIndex(List<Integer> list, int factor) {
Comparator<Integer> integerComparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// factor < 0 -> reversed order
return Integer.compare(o1, o2) * (factor);
}
};
Collections.sort(list, integerComparator);
return list;
}
и пользуйся им экс.
List<Integer> list = new ArrayList<>(Arrays.asList(8, 5, 4, 7));
System.out.println(list.toString());
list = iterateListByIndex(list, -1);
System.out.println(list.toString());
результаты могут быть:
[8, 5, 4, 7]
[8, 7, 5, 4]
Комментарии:
1. Похоже, вы опубликовали свой ответ под неправильным вопросом.