Есть ли что-то как C#/.NET's
IEnumerable<int> range = Enumerable.Range(0, 100); //.NET
в Java?
В Java для этого нет встроенной поддержки, однако это очень легко собрать самостоятельно. По большому счету, API Java предоставляют все элементы, необходимые для такого рода функций, но не комбинируют их сразу же.
Java использует подход, согласно которому существует бесконечное количество способов комбинировать вещи, так что зачем отдавать предпочтение нескольким комбинациям над другими.С правильным набором строительных блоков можно легко построить все остальное (это тоже философия Unix).
API других языков (например, C # и Python) имеют более взвешенный взгляд, они выбирают несколько вещей, которые действительно упрощают, но все же допускают более эзотерические комбинации.
Типичный пример проблемы с подходом Java можно увидеть в библиотеке Java IO . Канонический способ создания текстового файла для вывода:
BufferedWriter out = new BufferedWriter(new FileWriter("out.txt"));
Библиотека ввода-вывода Java использует шаблон декоратора , который является действительно хорошей идеей для обеспечения гибкости, но, конечно, чаще всего вам нужен буферизованный файл? Сравните это с эквивалентом в Python, который делает типичный вариант использования очень простым:
out = file("out.txt","w")
Вы можете подклассифицировать Arraylist для достижения того же самого:
public class Enumerable extends ArrayList<Integer> {
public Enumerable(int min, int max) {
for (int i=min; i<=max; i++) {
add(i);
}
}
}
Затем используйте итератор для получения последовательности целых чисел от min до max (оба включая)
EDIT
Как отметил sepp2k - решение выше быстрое, грязное и практичное, но имеет некоторые серьезные недостатки (не только O(n) в пространстве, тогда как должно быть O(1)). Для более серьезной эмуляции класса C# я бы лучше написал пользовательский класс Enumerable, реализующий Iterable и пользовательский итератор (но не здесь и не сейчас ;) ).