Stream kullanırken Java düzgün bir destek vermiyor.
2. Exception yakalama işi bir metod içinde yapılır
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);
Ö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.
Bu arayüzü kullanan static bir metod yaparız. @FunctionalInterfacepublic interface CheckedFunction<T,R> { R apply(T t) throws Exception; }
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