Dawid Ryczko
Dawid Ryczko
Jestem fanem Angulara i TypeScript.
Dawno temu kodowałem w Javie :)
Apr 1, 2017 3 min read

Omówienie interfejsów Supplier oraz BooleanSupplier #8

thumbnail for this post

Dzisiaj zajmiemy się dwoma ciekawymi interfejsami funkcjonalnymi. Pierwszy z nich to Supplier oraz BooleanSupplier. Każdy z tych interfejsów posiada jedną metodę abstrakcyjną. Zaczynajmy więc.

Supplier

Czyli tak naprawdę dostawca. Posiada abstrakcyjną metodę get(), która po wywołaniu zwróci nam obiekt, który zdefiniowaliśmy w naszej lambdzie. Na początek przyjrzyjmy się jak wygląda dokładnie ten interfejs:

@FunctionalInterface
public interface Supplier<T> {

  /**
   * Dostarcza określony wynik
   */
  T get();
}

Jak widzimy, cały interfejs jet bardzo prosty. Zobaczmy jak można go użyć w praktyce:

    List<Book> list = new ArrayList<>();

    Supplier<Book> supplier = Book::new;

    for (int i = 0; i < 100; i++) {
      list.add(supplier.get());
    }

    list.forEach(e-> System.out.println(e));

Na początek tworzymy pustą listę elementów Book. Definiujemy nasze wyrażenie lambda w oparciu o Supplier, którego zadaniem jest tworzenie nowego obiektu Book. W pętli kręcę się 100 razy i dodaję do mojej listy kolejne książki za pomocą mojego dostawcy. Wywołanie metody get() realizuje stworzenie nowego elementu. Dla udowodnienia wszystkiego wypisuję wszystkie elementy 😉

Wynik:

Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}
Book{title='null', price=0.0, cover='null'}

BooleanSupplier

BooleanSupplier ma jedno zadanie, które realizuje za pomocą abstrakcyjnej metody getAsBoolean().

@FunctionalInterface
public interface BooleanSupplier {

  /**
   * Dostarcza wynik w postaci boolean
   */
  boolean getAsBoolean();
}

Zobaczmy jak możemy go użyć. Tworzę obiekt książka, a zaraz potem wyrażenie lambda oparte na BooleanSupplier. W tym wyrażeniu zwracam losowo true lub false. Ostatecznie booleanSupplier.getAsBoolean() służy mi do wypełnienia pola isPromotion w klasie Book.

    Book book = new Book(19.99, "Czysty kod", "twarda");

    BooleanSupplier booleanSupplier = () -> {
      Random random = new Random();
      return random.nextBoolean();
    };

    book.setPromotion(booleanSupplier.getAsBoolean());

Wynik:

false

To tyle jeśli chodzi o te interfejsy funkcjonalne. Pamiętajcie, że kod z przykładami jest oczywiście na githubie.

comments powered by Disqus