Как преобразовать массив в поток
Источник:
Medium
С помощью этого руководства вы научитесь двум способам преобразования массива в поток на языке Java.
Преобразовать массив в поток можно с помощью метода
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) для преобразования массивов примитивных типов в потоки.
Имейте в виду, что после преобразования массива в поток и выполнения любой операции терминала (например, f
orEach,
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.
Используя этот способ работы, мы можем загрузить любой тип файла.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ