Вы можете использовать Collectors.partitioningBy
:
Map<Boolean, List<Integer>> map = list.stream().collect(Collectors.partitioningBy(element -> list.indexOf(element) >= 100));
and then do:
List<List<Integer>> results = new ArrayList(map.values());
Обновление: Collectors.partitioningBy
принимает предикат и, следовательно, не может решить желаемый вариант использования.
Или, если вы хотите разбить список на равные части (что, я думаю, больше подходит для вашего случая), вы можете использовать Collectors.groupingBy()
:
Map<Integer, List<Integer>> groups =
list.stream().collect(Collectors.groupingBy(element -> (element - 1) / YOUR_NUMBER_OF_PIECES_PER_SUBLIST));
List<List<Integer>> subLists= new ArrayList<List<Integer>>(groups.values());
System.out.println("Number of sublists " + subLists.size());
Это даст вам:
Number of sublists: 5
при работе с NUMBER_OF_PIECES_PER_SUBLIST = 200
, что кажется вашим вариантом использования.