15 Şubat 2021 Pazartesi

Stream Exception Handling

Giriş
Stream kullanırken Java düzgün bir destek vermiyor.

Unchecked Exception Handling
1. Exception yakalama işi ya lambda içinde yapılır. Bu kodu daha karmaşık hale getiriyor
Örnek
Şöyle yaparız
myList.stream()
  .map(item -> {
    try {
      return doSomething(item);
    } catch (MyException e) {
      throw new RuntimeException(e);
    }
  })
  .forEach(System.out::println);
2. Exception yakalama işi bir metod içinde yapılır
Örnek
Şöyle yaparız. Bu kod lambda içindeki exception yakalamaya göre daha okunaklı
myList.stream()
  .map(this::trySomething)
  .forEach(System.out::println);


private Item trySomething(Item item) {
  try {
    return doSomething(item);
  } catch (MyException e) {
    throw new RuntimeException(e);
  }
}
Bu tür kodlardan çok varsa şöyle yaparız. Bu arayüzün ismi FunctionWithException da olabilir.
@FunctionalInterface
public interface CheckedFunction<T,R> { R apply(T t) throws Exception; }
Bu arayüzü kullanan static bir metod yaparız
public static <T,R> Function<T,R> wrapper(CheckedFunction<T,R> checkedFunction) {
return t -> { try { return checkedFunction.apply(t); } catch (Exception e) { throw new RuntimeException(e); } }; }
ve bu metodu static import ile kullanırız. Şöyle yaparız
myList.stream()
.map(wrapper(item -> doSomething(item))) .forEach(System.out::println);




Hiç yorum yok:

Yorum Gönder