from itertools import islice
def split_every(n, iterable):
i = iter(iterable)
piece = list(islice(i, n))
while piece:
yield piece
piece = list(islice(i, n))
Некоторые тесты:
>>> list(split_every(5, range(9)))
[[0, 1, 2, 3, 4], [5, 6, 7, 8]]
>>> list(split_every(3, (x**2 for x in range(20))))
[[0, 1, 4], [9, 16, 25], [36, 49, 64], [81, 100, 121], [144, 169, 196], [225, 256, 289], [324, 361]]
>>> [''.join(s) for s in split_every(6, 'Hello world')]
['Hello ', 'world']
>>> list(split_every(100, []))
[]
Я не использовал ни одно из этих решений, но есть
-target jsr14
может работать Вы также можете найти javac -XD-printflat
полезным (но будьте осторожны, чтобы не перезаписать исходный код).
Универсальные шаблоны реализуются путем стирания типов, поэтому они должны работать до того, как будут введены универсальные шаблоны. Однако вы не сможете скомпилировать код с помощью более старой версии компилятора (я не знаю, зачем вам это нужно)
У меня есть проект, в котором используются дженерики и несколько кусочков Java 1.5 / 6. Можно ли скомпилировать этот код в работать в системе под управлением JRE 1.4?
Нет.
Придется ли мне проходить через все мой код и измените 1.5 на заставить это работать?
Да. Но есть способ автоматизировать это, используя инструмент под названием Retroweaver . Однако нет гарантии, что он все поймает.
У меня был хороший опыт работы с Retrotranslator (Retroweaver не работал с тем, что мне было нужно, не могу точно вспомнить, что).
Он очень хорошо работал для моей цели (создание JDK1.4 версии Logback).