Тип Optional. Метод collect

Прокрутити вниз

Тип Optional. Метод collect – онлайн уроки java для дітей

Тип `Optional` в Java

`Optional` — це обгортка (контейнер), яка може містити або не містити значення. Він використовується для уникнення проблем з `NullPointerException` та для явного вказання на можливу відсутність значення.

Основні методи `Optional`

  1. `empty()` — повертає порожній `Optional` без значення.
    Optional<String> emptyOpt = Optional.empty();
  2. `of(T value)` — створює `Optional`, що містить непорожнє значення. Якщо передати `null`, виникне `NullPointerException`.
    Optional<String> opt = Optional.of(“Hello”);
  3. `ofNullable(T value)` — створює `Optional`, який може містити значення або бути порожнім, якщо передане значення є `null`.
    Optional<String> opt = Optional.ofNullable(null); // Порожній Optional
  4. `isPresent()` — повертає `true`, якщо значення присутнє, інакше `false`.
    if (opt.isPresent()) {
    System.out.println(“Значення є”);
    }
  5. `ifPresent(Consumer<? super T> action)` — виконує дію, якщо значення присутнє.
    opt.ifPresent(value -> System.out.println(value));
  6. `orElse(T other)` — повертає значення, якщо воно присутнє, або інше значення, якщо значення відсутнє.
    String result = opt.orElse(“Значення відсутнє”);
  7. `orElseGet(Supplier<? extends T> other)` — повертає значення або обчислює інше значення, якщо `Optional` порожній.
    String result = opt.orElseGet(() -> “Значення відсутнє”);
  8. `orElseThrow(Supplier<? extends X> exceptionSupplier)` — повертає значення, якщо воно є, або кидає виняток.
    String result = opt.orElseThrow(() -> new IllegalArgumentException(“Значення відсутнє”));
  9. `map(Function<? super T, ? extends U> mapper)` — перетворює значення, якщо воно присутнє.
    Optional<Integer> lengthOpt = opt.map(String::length);
  10. `filter(Predicate<? super T> predicate)` — повертає `Optional` з тим самим значенням, якщо воно відповідає умові, або порожній `Optional`.
    Optional<String> filteredOpt = opt.filter(value -> value.length() > 3);

Приклад використання `Optional`:

import java.util.Optional;

public class Main {
public static void main(String[] args) {
Optional<String> opt = Optional.ofNullable(“Java Optional Example”);

// Використання ifPresent
opt.ifPresent(System.out::println);

// Використання orElse
String result = opt.orElse(“Default Value”);
System.out.println(result);
}
}

Метод `collect` в Stream API

Метод `collect()` в Stream API використовується для збирання елементів потоку в колекцію або інші структури даних. Це термінальна операція, яка завершує потік і повертає результат.

Синтаксис:

<R, A> R collect(Collector<? super T, A, R> collector);

Метод `collect()` приймає об’єкт `Collector`, який визначає, як елементи потоку будуть збиратися. Java надає ряд вбудованих колекторів у класі `Collectors`.

Основні колектори з `Collectors`:

  1. Збирання в список:
    List<String> list = stream.collect(Collectors.toList());
  2. Збирання в множину:
    Set<String> set = stream.collect(Collectors.toSet());
  3. Збирання в рядок із розділювачем:
    String result = stream.collect(Collectors.joining(“, “));
  4. Групування елементів за ключем:
    Map<Integer, List<String>> groupedByLength = stream.collect(Collectors.groupingBy(String::length));
  5. Збирання в мапу:
    Map<String, Integer> map = stream.collect(Collectors.toMap(str -> str, String::length));

Приклад використання методу `collect`:

Збирання елементів потоку в список:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList(“Ольга”, “Іван”, “Марія”, “Олег”);

// Збирання в список
List<String> result = names.stream()
.filter(name -> name.length() > 4)
.collect(Collectors.toList());

System.out.println(result); // Виведе: [Ольга, Марія]
}
}

Об’єднання елементів потоку в рядок:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList(“Ольга”, “Іван”, “Марія”, “Олег”);

// Об’єднання імен у рядок із комами
String result = names.stream()
.collect(Collectors.joining(“, “));

System.out.println(result); // Виведе: Ольга, Іван, Марія, Олег
}
}

Групування елементів:

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList(“Ольга”, “Іван”, “Марія”, “Олег”);

// Групування імен за їхньою довжиною
Map<Integer, List<String>> groupedByLength = names.stream()
.collect(Collectors.groupingBy(String::length));

System.out.println(groupedByLength); // Виведе: {4=[Іван, Олег], 5=[Ольга, Марія]}
}
}

Висновок

  • `Optional` — це контейнер, який допомагає працювати з відсутніми значеннями, уникаючи помилок із `null`.
  • `collect()` — це термінальна операція в Stream API, що збирає елементи потоку в колекції або інші структури даних за допомогою колекторів із `Collectors`.

Ці дві концепції широко використовуються для підвищення ефективності й зручності обробки даних у Java.

Тип Optional. Метод collect