Как преобразовать массив в поток

Источник: Medium С помощью этого руководства вы научитесь двум способам преобразования массива в поток на языке Java. Кофе-брейк #272. Как преобразовать массив в поток. Как создать HttpClient на Java для загрузки файла - 1Преобразовать массив в поток можно с помощью метода Arrays.stream() для массивов примитивных типов (int[], double[] и других) и массивов объектов. Также вы можете использовать метод Stream.of() для массивов объектов.

1. Для примитивного массива


int[] intArray = {1, 2, 3, 4, 5};
он повторно запустит IntStream.

int[] intArray = {1, 2, 3, 4, 5};
// Преобразуем массив int в IntStream
IntStream intStream = Arrays.stream(intArray);

double[] doubleArray = {1.0, 2.0, 3.0, 4.0, 5.0};
// Преобразуем двойной массив в DoubleStream
DoubleStream doubleStream = Arrays.stream(doubleArray);

import java.util.Arrays;
import java.util.stream.IntStream;

public class ArrayToStreamExample {
    public static void main(String[] args) {
        int[] intArray = {1, 2, 3, 4, 5};

        // Преобразуем массив int в IntStream
        IntStream intStream = Arrays.stream(intArray);

        // Выполняем потоковые операции
        intStream.forEach(System.out::println);
    }
}

2. Для массивов объектов


String[] stringArray = {"apple", "banana", "orange"};
тип возвращаемого значения будет Stream<String>.

String[] stringArray = {"apple", "banana", "orange"};
// Преобразуем массив String в Stream<String>
Stream<String> stringStream = Arrays.stream(stringArray);

Stream<String> stringStream = Stream.of(stringArray);
В качестве альтернативы мы можем использовать Stream.of() для массивов объектов.

import java.util.Arrays;
import java.util.stream.Stream;

public class ArrayToStreamExample {
    public static void main(String[] args) {
        String[] stringArray = {"apple", "banana", "cherry"};

        // Преобразование массива String в Stream<String>
        Stream<String> stringStream = Arrays.stream(stringArray);

        // Выполняем потоковые операции
        stringStream.forEach(System.out::println);
    }
}
Обратите внимание, что метод Arrays.stream() может обрабатывать массивы любого типа (как примитивные типы, так и объекты). Но метод Stream.of() предназначен только для массивов объектов. Если вы работаете с примитивными типами данных (int, long, double), то существуют специализированные методы, такие как Arrays.stream(int[] array), Arrays.stream(long[] array), и Arrays.stream(double[] array) для преобразования массивов примитивных типов в потоки. Имейте в виду, что после преобразования массива в поток и выполнения любой операции терминала (например, forEach, Collect), поток считается использованным и не может быть повторно использован. Если вам нужно выполнить несколько операций с одними и теми же данными, вам следует создать новый поток для каждой операции. Спасибо и приятного обучения :)

Как создать HttpClient на Java для загрузки файла

Источник: Asyncq Изучив данную публикацию, вы научитесь создавать на языке Java HTTP-клиент, который будет загружать файлы из интернета. Сейчас мы создадим HTTP-клиент для загрузки файлов из интернета. Для демонстрации работы этого клиента мы будем использовать файлы изображений и файлы PDF, но вы можете применять клиент для файлов любого типа. Для работы с кодом нам требуется Java 11, поскольку мы будем использовать HttpClient, который был добавлен в Java 11.

Создание объекта запроса

Сначала мы создадим HTTP-запрос GET. HttpRequest следует шаблону Builder.

private static HttpRequest getHttpRequest(String uri) {
        HttpRequest request = HttpRequest
                .newBuilder()
                .uri(URI.create(uri))
                .GET()
                .build();
        return request;
}

Создание объекта HttpClient

После этого мы создадим httpclient и запустим его, чтобы получить ответ. Поскольку ответ состоит из файлов, чтобы прочитать файл, нам нужно передать обработчики body (bodyhandlers) с InputStream.

private static HttpResponse<InputStream> getResponse(HttpRequest request) throws IOException, InterruptedException {
        return HttpClient
                .newHttpClient()
                .send(request, HttpResponse.BodyHandlers.ofInputStream());
}

Запись в Local File

Выполнить запись в локальный файл довольно легко. Мы можем записать с помощью FileOutputStream. Так мы получаем контент в качестве входного потока (inputstream).

private static void WriteLocal(InputStream body, String destinationFIle) throws IOException {
        FileOutputStream fos = new FileOutputStream(destinationFIle);
        fos.write(body.readAllBytes());
        fos.close();
}

Загружаем Image Client

  • Загружаем endpoint.
  • Поскольку мы загружаем изображения, тело ответа содержит входной поток (inputstream).
  • Получив inputstream, мы можем записать на локальный диск.

private static void downloadImage(String imageName) throws IOException, InterruptedException {
        HttpRequest request = getHttpRequest(imageName);
 
        HttpResponse<InputStream> response = getResponse(request);
 
        System.out.println("status code: "+response.statusCode());
        InputStream body = response.body();
 
        WriteLocal(body, "image.png");
 }

Загружаем PDF Client

Точно так же мы также можем загружать PDF-файлы. Код будет выглядеть точно так же, как и файл изображения.

private static void downloadPDF(String pdfFile) throws IOException, InterruptedException {
        HttpRequest request = getHttpRequest(pdfFile);
        HttpResponse<InputStream> response = getResponse(request);
 
        System.out.println("status code: "+response.statusCode());
        InputStream body = response.body();
 
        WriteLocal(body, "sample.pdf");
}

Заключение

В этой статье мы использовали HttpClient из Java 11 для загрузки изображений и PDF-файла. BodyHandler предоставляет различные способы обработки тела ответа, а в случае с файлами мы можем использовать InputStream. Используя этот способ работы, мы можем загрузить любой тип файла.