Если метод Collections.rotate
не возвращает новую копию исходного списка, просто напишите ее самостоятельно!
static <T> ArrayList<T> rotate(ArrayList<T> list, int distance) {
ArrayList<T> newList = new ArrayList<>(list);
Collections.rotate(newList, distance);
return newList;
}
Вы можете использовать его для печати желаемого результата:
ArrayList<Integer> obj = new ArrayList<>(Arrays.asList(3,6,4,1,9));
List<ArrayList<Integer>> listOfArrayLists =
IntStream.range(0, obj.size()) // replace obj.size() with however many rotations you want
.mapToObj(x -> rotate(obj, x))
.collect(Collectors.toList());
for (int i = 0 ; i < listOfArrayLists.get(0).size() ; i++) {
for (ArrayList<Integer> listOfArrayList : listOfArrayLists) {
System.out.print(listOfArrayList.get(i));
System.out.print(" ");
}
System.out.println();
}
Если вы действительно хотите напечатать все повороты списка массивов таким «транспонированным» способом, тогда вам на самом деле не нужно столько новых списков массивов! Если вы еще не заметили, первая строка выходных данных совпадает со списком входных массивов, повернутых на 1 и повернутыми на 1. Вторая строка представляет собой входные данные, повернутые на 2 и повернутые на 2, и так далее. Следовательно, это даст точно такой же результат:
Collections.reverse(obj);
for (int i = 0 ; i < obj.size() ; i++) {
Collections.rotate(obj, 1);
for (Integer j : obj) {
System.out.print(j);
System.out.print(" ");
}
System.out.println();
}