Java for Beginner
870 subscribers
1.01K photos
275 videos
14 files
1.69K links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Варианты ответа:
Anonymous Quiz
38%
5 1 2 3 4 5
50%
3 1 2 3
0%
3 1 2 3 4
13%
5 1 2 3 4
👍3
Красоты Телецкого озера
🔥11
Водопад Чедор
👍8
Что такое Files.readString() и writeString()? 🤓

Ответ:

В Java 11 добавлены удобные методы для чтения и записи строк из/в файл: 

Files.readString(Path path) — читает весь файл в строку (используя UTF-8). 

Files.writeString(Path path, CharSequence csq) — записывает строку в файл.

Поддерживают опции StandardOpenOption. Это избавляет от рутины с BufferedReader и FileWriter для простых сценариев.

Пример: String content = Files.readString(Path.of("file.txt"));. Подходят для небольших файлов (для больших использовать стримы).



#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
[Совет по Java #056]

Тема: CompletableFuture.allOf не возвращает результаты.

Проблема: CompletableFuture.allOf(CompletableFuture<?>... cfs) возвращает CompletableFuture<Void>, который завершается, когда все переданные фьючеры завершены (успешно или с исключением).

Однако он не предоставляет сами результаты. Разработчики часто ошибочно полагают, что результирующий фьючер содержит список значений, и пытаются его обработать, сталкиваясь с тем, что нет доступа к данным. Приходится либо повторно обращаться к исходным фьючерам через join(), либо использовать громоздкие конструкции. Это ведет к дублированию кода и потенциальным ошибкам, если какой-то фьючер завершился исключительно.

Решение: После allOf примените thenApply или thenRun, чтобы объединить результаты из исходного списка. Самый чистый способ — обернуть allOf в цепочку, которая собирает значения через Stream и map(CompletableFuture::join). Если нужна обработка каждого результата, используйте thenApply с преобразованием в коллекцию. Для асинхронного продолжения можно применить thenCompose или thenCombine, но они сложнее.

Важно помнить, что join() на завершенном фьючере не блокирует (или блокирует очень коротко), поэтому безопасно вызывать его после allOf.
import java.util.concurrent.CompletableFuture;
import java.util.List;
import java.util.stream.Collectors;

public class AllOfResults {

public static void main(String[] args) {
List<CompletableFuture<String>> futures = List.of(
CompletableFuture.supplyAsync(() -> "Result 1"),
CompletableFuture.supplyAsync(() -> "Result 2"),
CompletableFuture.supplyAsync(() -> "Result 3")
);

//allOf возвращает Void — результаты не доступны
CompletableFuture<Void> all = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
all.join(); // ждем завершения, но результатов нет

//Собираем результаты вручную через thenApply
CompletableFuture<List<String>> combined = CompletableFuture
.allOf(futures.toArray(new CompletableFuture[0]))
.thenApply(v -> futures.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList()));

List<String> results = combined.join();
System.out.println(results); // [Result 1, Result 2, Result 3]

// Альтернатива: использование thenAccept для побочного эффекта
CompletableFuture<Void> log = CompletableFuture
.allOf(futures.toArray(new CompletableFuture[0]))
.thenAccept(v -> futures.forEach(f -> System.out.println(f.join())));
log.join();

//Сборка с преобразованием типов
CompletableFuture<Integer> totalLength = CompletableFuture
.allOf(futures.toArray(new CompletableFuture[0]))
.thenApply(v -> futures.stream()
.map(CompletableFuture::join)
.mapToInt(String::length)
.sum());
System.out.println("Total length: " + totalLength.join());
}
}


Объяснение:
 allOf — это синхронизатор, а не коллектор. Его предназначение — дождаться завершения всех задач, чтобы затем предпринять действие.

Передавая массив фьючеров, мы получаем Void, потому что при проектировании API было решено не навязывать типовые ограничения на разнородные результаты. Поэтому сбор результатов остается на совести разработчика.

После того как allOf завершился, все фьючеры гарантированно находятся в состоянии "завершено" (completed), поэтому вызов join() на каждом из них не блокирует и безопасен. Это позволяет строить цепочки, где thenApply получает Void и возвращает нужную коллекцию. Для обработки ошибок используйте handle вместо thenApply.


#Java #советы
👍5
Вид на Телецкое озеро, Артыбаш и Иогай с Смотровой площадки
🔥5👍3
Что выведет код?

import java.util.concurrent.CompletableFuture;

public class Task020726 {
public static void main(String[] args) throws Exception {
CompletableFuture<Integer> f1 = CompletableFuture.completedFuture(42);
CompletableFuture<String> f2 = CompletableFuture.completedFuture("hello");
CompletableFuture<Void> all = CompletableFuture.allOf(f1, f2);
System.out.println(all.get());
}
}


#Tasks
👍4
Варианты ответа:
Anonymous Quiz
25%
42
6%
hello
31%
null
38%
Исключение
👍4
Что такое List.copyOf()Set.copyOf()Map.copyOf()? 🤓

Ответ:

Методы copyOf() (Java 10) создают неизменяемую (immutable) копию коллекции.

Если исходная коллекция уже неизменяема, метод может вернуть её же. Бросают NullPointerException, если коллекция содержит null.

Это часть новой стратегии создания неизменяемых коллекций. Также в Java 9 появились фабричные методы: List.of(), Set.of(), Map.of() для создания компактных неизменяемых коллекций.

Это упрощает инициализацию и гарантирует потокобезопасность (коллекции не изменяются).



#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
История технологии сегодня — 3 июля

ℹ️ Кто родился в этот день

Леонид Александрович Шеметков (бел. Леанід Аляксандравіч Шамяткоў; 3 июля 1937, Гомель — 24 марта 2013, Гомель) — белорусский математик. Тематика научных исследований Леонида Александровича связана преимущественно с теорией конечных групп, которая, по высказыванию его учителя С. А. Чунихина, является «трамплином и творческой лабораторией для алгебры в целом». В 1947 г. ленинградский математик, член-корреспондент АН СССР Д. К. Фаддеев установил принципиальную возможность описания конечных недисперсивных разрешимых групп порядка pnq и поставил задачу о справедливости этого результата для разрешимых групп произвольного порядка.

Джесси Дуглас (англ. Jesse Douglas; 3 июля 1897 — 7 сентября 1965) — американский математик, лауреат Филдсовской премии 1936 года. Джесси Дуглас также внёс значительный вклад в решение обратной задачи Лагранжевой механики. В 1943 году Американское математическое общество присудило ему премию имени М. Бохера.


🌐 Знаковые события

1958 — начались ходовые испытания первой советской атомной подводной лодки К-3 «Ленинский комсомол».

2006 — астероид 2004 XP14 пролетел на расстоянии 432 308 километров от поверхности Земли.


#Biography #Birth_Date #Events #03июля
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2