Сделайте это следующим образом:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
System.out.println(separate(list, 3));
}
static <T> List<List<T>> separate(List<T> path, final int size) {
List<List<T>> separated = new ArrayList<>();
List<T> temp;
for (int i = 0; i < path.size(); i += size - 1) {
temp = (List<T>) path.subList(i, Math.min(path.size(), i + size));
if (temp.size() != 1) {
separated.add(new ArrayList<T>(temp));
}
}
return separated;
}
}
Вывод:
[[1, 2, 3], [3, 4, 5], [5, 6, 7], [7, 8, 9]]
Обновление
@ Мистер Мосби - Вы оставили комментарий о дополнительное требование не добавлять подсписок в separated
, если в нем только один элемент, и, соответственно, я обновил свой ответ, приведенный выше. На всякий случай, если вам нужно, не добавлять подсписок в separated
, если в нем меньше элементов, чем size
, ниже приводится решение:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8);
System.out.println(separate(list, 3));
}
static <T> List<List<T>> separate(List<T> path, final int size) {
List<List<T>> separated = new ArrayList<>();
List<T> temp;
for (int i = 0; i < path.size(); i += size - 1) {
temp = (List<T>) path.subList(i, Math.min(path.size(), i + size));
if (temp.size() == size) {
separated.add(new ArrayList<T>(temp));
}
}
return separated;
}
}
Вывод:
[[1, 2, 3], [3, 4, 5], [5, 6, 7]]