Например, у меня есть список целых чисел, как List(1,2,3,4,5,6,7)
Я хочу получить все комбинации последовательных 3 чисел в Java 8, более функциональный способ изучения Java 8. (я знаю, как это сделать в обязательном порядке)
Таким образом, результатом выше может быть список в виде:
List(List(1,2,3), List(2,3,4), List(3,4,5), List(4,5,6), List(5,6,7))
Спасибо




Вы можете сделать это с помощью List.subList, перебирая его:
final int subListSize = 3;
List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7);
List<List<Integer>> sublists = IntStream.rangeClosed(0, list.size() - subListSize)
.mapToObj(i -> list.subList(i, i + subListSize))
.collect(Collectors.toList());
Вы также можете сделать это с помощью библиотеки jOOλ и ее метода Seq.sliding() (Seq - это последовательный Stream):
List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7);
List<List<Integer>> sublists = Seq.seq(list)
.sliding(3)
.map(Collectable::toList)
.toList();
который дает:
[[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6], [5, 6, 7]]
Обратите внимание, что:
ArrayList не создаются)List<List<T>> sublists(List<T> list, int sublistSize)list, в то время как нулевой указатель - это список Просмотры исходного listlist, ни созданный sublists впоследствии не модифицируются, поэтому это не имеет значения (и это хорошо для производительности)list).map(List::copyOf) после mapToObj в его растворе (или .map(ArrayList::new), если вам нужны изменяемые результаты)
Может ли список быть случайным? Например:
List(6, 7, 4, 3, 2)