Interface Supplier jest jednym z interfejsów z którego korzystają strumienie. Metoda z tego interfejsu jest wykorzystywana w celu uniknięcia wygenerowania wyjątku przy zastosowaniu większej liczby niż 1 operacji typu terminal. Interfejs ten został wprowadzony w Java 8 (pakiet java.util.function). jest interfejs funkcyjny ( a więc możne wykorzystywać lambdy). Jedyna metodą jest metoda bez prametrowa/bez argumentowa: get() która ma za zadanie „wyprodukowanie” wartości typu T . Interfejs Supplier wspiera programowanie funkcyjne.
W jednym z wcześniejszych wpisów Strumienie – STREAM była mowa o operacjach typu Terminal które zamykają strumienie oraz że może być tylko jedna operacja typu terminal. Jednak w przykładzie poniżej dzięki zastosowaniu metody get() można zwiększyć liczbę operacji typu Terminal. Proszę spójrz poniżej:
Supplier<Stream<String>> namesSupplier = () -> Stream.of("John", "Marry", "George", "Paul", "Alice", "Ann"); Predicate<String> hasName = name -> name.equals("Alice"); namesSupplier.get().anyMatch(hasName); // ok namesSupplier.get().noneMatch(hasName); // ok
Każdorazowe wywołanie metody get() dostarcza/produkuje nam „nowy” strumień i dzięki temu możemy wykonać kolejną operację typu terminal bez obaw iż zostanie rzucony wyjątek: IllegalStateException.