junior
Какие существуют способы создания стрима?
Стримы можно создать из множества источников данных. Ниже перечислены восемь основных способов.
| Способ | Пример |
|---|---|
| Из коллекции | list.stream() |
| Из набора значений | Stream.of("x", "y", "z") |
| Из массива | Arrays.stream(array) |
| Из файла | Files.lines(Paths.get("input.txt")) |
| Из строки | "abc".chars() |
| Через Builder | Stream.builder().add("a").add("b").build() |
| Через iterate (бесконечный) | Stream.iterate(1, n -> n + 1) |
| Через generate (бесконечный) | Stream.generate(Math::random) |
Примеры кода для каждого способа
// 1. Из коллекции
Stream<String> fromCollection = Arrays.asList("x", "y", "z").stream();
// 2. Из набора значений
Stream<String> fromValues = Stream.of("x", "y", "z");
// 3. Из массива
Stream<String> fromArray = Arrays.stream(new String[]{"x", "y", "z"});
// 4. Из файла (каждая строка — элемент)
Stream<String> fromFile = Files.lines(Paths.get("input.txt"));
// 5. Из строки
IntStream fromString = "0123456789".chars();
// 6. С помощью Stream.builder()
Stream<String> fromBuilder = Stream.builder().add("z").add("y").add("z").build();
// 7. С помощью Stream.iterate() (бесконечный)
Stream<Integer> fromIterate = Stream.iterate(1, n -> n + 1);
// 8. С помощью Stream.generate() (бесконечный)
Stream<String> fromGenerate = Stream.generate(() -> "0");
Бесконечные стримы (iterate и generate) требуют ограничения через limit(), иначе конечная операция не завершится. Начиная с Java 9, метод iterate получил перегрузку с предикатом: Stream.iterate(0, n -> n < 10, n -> n + 1).
На собеседовании: назовите хотя бы 4-5 способов и упомяните, что
iterate/generateсоздают бесконечные стримы. Также стоит знать, что стрим из файла (Files.lines) нужно закрывать (реализуетAutoCloseable).