Повторите список в обратном порядке по определенному индексу

#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. Похоже, вы опубликовали свой ответ под неправильным вопросом.