Обновления Java

  • Обновления Java

    Новые фичи Java 18

    Новые фичи Java 18[Новые фичи Java 18]

    Java 18 вышла 22 марта 2022. Это очередной релиз, который будет поддерживаться до сентября 2022. В этот релиз попало более 200 задач и 9 JEP.

    Основные фичи (JEP)

    Паттерн-матчинг для switch (Second Preview) (JEP 420)

    Сниппеты кода в документации Java API (JEP 413) Подробнее ...

  • Обновления Java

    Новый синтаксис оператора switch в Java 12

    Новый синтаксис оператора switch в Java 12[Новый синтаксис оператора switch в Java 12]

    Java 12 привносит новый вариант использования оператора switch. В случаях, если нам нужно сделать присвоение какой-либо переменной в зависимости от нужного условия в case, мы можем использовать новый синтаксис.

    Как мы писали на Java конструкции с оператором switch? Примерно так:

    public class SwitchOperatorOld { public static void main(String[] args) { // Так было до Java 12 Weekdays weekday = FRIDAY; String typeOfDay; switch (weekday) { case MONDAY: case TUESDAY: case WEDNESDAY: case THURSDAY: case FRIDAY: typeOfDay = "будний день"; break; case SATURDAY: case SUNDAY: typeOfDay = "выходной день"; break; default: throw new IllegalStateException("Неизвестный день недели!" + weekday); } System.out.println(weekday.getName() + " это " + typeOfDay); } } Подробнее ...

  • Обновления Java

    skipNBytes() – пропуск N байтов при чтении из InputStream

    skipNBytes() – пропуск N байтов при чтении из InputStream[skipNBytes() – пропуск N байтов при чтении из InputStream]

    Интерфейс InputStream предназначен для чтения байтов из потока. Метод skipNBytes(), появившийся в Java 12, позволяет пропустить n байтов и продолжить чтение дальше.

    Допустим, вы читаете через InputStream содержимое текстового файла:

    import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; public class SkipNBytes { public static void main(String[] args) throws IOException { InputStream is = ClassLoader.getSystemClassLoader().getResource("hello.txt").openStream(); ByteArrayOutputStream result = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) != -1) { result.write(buffer, 0, length); } String fileContent = result.toString(StandardCharsets.UTF_8.name()); System.out.println(fileContent); is.close(); } } Подробнее ...

  • Обновления Java

    Collectors.teeing() – новый коллектор в Java 12

    Collectors.teeing() – новый коллектор в Java 12[Collectors.teeing() – новый коллектор в Java 12]

    Java 12 добавляет новый коллектор в свою библиотеку – teeing collector. Этот коллектор принимает два других коллектора в качестве источников значений стрима, и функцию мержа, в которую он передаёт значения из указанных выше коллекторов.

    Визуально схему работы teeing коллектора можно изобразить следующим образом:

    Кстати, слово teeing переводится как «тройной», «тройниковый», «T-образный», что отражает суть работы коллектора – принять два значения, произвести некоторые операции над ними и выдать третье, результирующее значение.

    Давайте рассмотрим следующий пример по вычислению среднеарифметического значения набора чисел:

    double average = Stream.of(1, 4, 2, 7, 4, 6, 5)
            .collect(teeing(
                    summingDouble(i -> i),
                    counting(),
                    (sum, n) -> sum / n));
    System.out.println("Среднее значение ряда: " + average);

    Примечание: здесь teeing, summingDouble и counting – статически импортированные методы класса Collectors.

    Что же происходит в данном коде?
    С помощью summingDoubles коллектора суммируются все значения:

    summingDouble(i -> i)

    а с помощью counting коллектора подсчитывается количество элементов в стриме:

    counting()

    После того, как два коллектора выдали результат своих вычислений, teeing коллектор использует переданную функцию, чтобы вычислить среднеарифметическое значение:

    (sum, n) -> sum / n)

    После этого teeing коллектор возвратит результат:

    Среднее значение ряда: 4.142857142857143

    Таким образом, teeing коллектор полезен в тех случаях, когда вам требуется распараллелить стрим на два коллектора и затем смержить промежуточные значения в какое-то одно.

    Полный исходный код примера:

    import java.util.stream.Stream; import static java.util.stream.Collectors.*; public class TeeingCollector { public static void main(String[] args) { double average = Stream.of(1, 4, 2, 7, 4, 6, 5) .collect(teeing( summingDouble(i -> i), counting(), (sum, n) -> sum / n)); System.out.println("Среднее значение ряда: " + average); } } Подробнее ...