Die Anleitung zu Java Supplier
1. Supplier
Im Java 8 ist Supplier eine einfache functional interface. Es vertritt einen Operator, der für jeden Aufruf einen Wert bereitstellt. Der Supplier hat nur einzige Methode get() und keine Defaultmethode.
Supplier
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Es gibt einige andere ähnliche functional interface, die primitive Werten bereitstellen. Das sind IntSupplier, DoubleSupplier, LongSupplier, BooleanSupplier:
IntSupplier int getAsInt();
DoubleSupplier double getAsDouble();
LongSupplier long getAsLong();
BooleanSupplier boolean getAsBoolean();
- IntSupplier
- DoubleSupplier
- LongSupplier
- BooleanSupplier
Z.B: Verwenden Sie Supplier um für jeden Anruf eine Zufallszahl zurückzugeben.
SupplierEx1.java
package org.o7planning.ex;
import java.util.function.Supplier;
public class SupplierEx1 {
public static void main(String[] args) {
Supplier<Double> random = () -> Math.random();
System.out.println("Random value: " + random.get());
System.out.println("Random value: " + random.get());
System.out.println("Random value: " + random.get());
}
}
Output:
Random value: 0.5085772031422864
Random value: 0.666568263619468
Random value: 0.18177402871597048
Z.B: Verwenden Sie Supplier um das aktuelle Datum zurückzugeben:
SupplierEx2.java
package org.o7planning.ex;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.function.Supplier;
public class SupplierEx2 {
private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
public static void main(String[] args) {
Supplier<LocalDateTime> s = () -> LocalDateTime.now();
LocalDateTime time = s.get();
System.out.println(time);
Supplier<String> s1 = () -> dtf.format(LocalDateTime.now());
String time2 = s1.get();
System.out.println(time2);
}
}
Output:
2021-02-12T13:31:43.023203
2021-02-12 13:31:43
Z.B: Verwenden Sie Supplier in die statische Methode Stream.generate um 5 Zufallszählen auszudrucken:
// Method of java.util.stream.Stream class:
static <T> Stream<T> generate(Supplier<T> s)
SupplierEx3.java
package org.o7planning.ex;
import java.util.Random;
import java.util.function.Supplier;
import java.util.stream.Stream;
public class SupplierEx3 {
public static void main(String[] args) {
// Returns a random integer in range [0,10)
Supplier<Integer> randomNumbersSupp = () -> new Random().nextInt(10);
Stream.generate(randomNumbersSupp)
.limit(5)
.forEach(System.out::println); // .forEach(Consumer)
}
}
Output:
5
5
0
2
0
2. Supplier Usage
Unten ist das die Liste der Methode in Paket java.util mit der Verwendung von Supplier:
Modifier and Type | Method and Description |
T | Optional.orElseGet(Supplier<? extends T> other) |
<X extends Throwable>
T | Optional.orElseThrow(Supplier<? extends X> exceptionSupplier) |
<X extends Throwable>
long | OptionalLong.orElseThrow(Supplier<X> exceptionSupplier) |
<X extends Throwable>
double | OptionalDouble.orElseThrow(Supplier<X> exceptionSupplier) |
<X extends Throwable>
int | OptionalInt.orElseThrow(Supplier<X> exceptionSupplier) |
static <T> T | Objects.requireNonNull(T obj, Supplier<String> messageSupplier) |
3. Supplier + Method reference
Eine Methode, die keine Parameter akzeptiert und einen Wert zurückgibt, dessen Referenz als Supplier behandelt wird.
SupplierEx4.java
package org.o7planning.ex;
import java.time.LocalDate;
import java.util.function.Supplier;
public class SupplierEx4 {
public static void main(String[] args) {
Supplier<Integer> s1 = MyUtils::getCurrentYear; // Method reference
System.out.println(s1.get());
Employee employee = new Employee("Tom");
Supplier<String> s2 = employee::getName; // Method reference
System.out.println(s2.get());
}
public static class MyUtils {
public static int getCurrentYear() {
return LocalDate.now().getYear();
}
}
public static class Employee {
private String name;
public Employee(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
}
Output:
2021
Tom
4. Supplier + Constructor reference
Ein Konstruktor erstellt ein neues Objekt. Wenn er keine Paramter hat, wird seine Referenz als Supplier behandelt.
SupplierEx7.java
package org.o7planning.ex;
import java.util.Random;
import java.util.function.Supplier;
public class SupplierEx7 {
public static void main(String[] args) {
Supplier<Random> s = Random::new; // Constructor reference
//
int randomValue = s.get().nextInt(10);
System.out.println("Random Value: " + randomValue);
}
}
Output:
Random Value: 8
Java Grundlagen
- Anpassen von Java-Compiler, der Ihre Annotation verarbeitet (Annotation Processing Tool)
- Java Programmierung für Team mit Eclipse und SVN
- Die Anleitung zu Java WeakReference
- Die Anleitung zu Java PhantomReference
- Komprimierung und Dekomprimierung in Java
- Konfigurieren von Eclipse zur Verwendung des JDK anstelle von JRE
- Java-Methoden String.format() und printf()
- Syntax und neue Funktionen in Java 8
- Die Anleitung zu Java Reguläre Ausdrücke
- Die Anleitung zu Java Multithreading Programming
- JDBC Driver Bibliotheken für verschiedene Arten von Datenbank in Java
- Die Anleitung zu Java JDBC
- Holen Sie sich die automatisch erhöhenden Wert der Spalte bei dem Insert eines Rekord, der JDBC benutzt
- Die Anleitung zu Java Stream
- Die Anleitung zu Java Functional Interface
- Einführung in Raspberry Pi
- Die Anleitung zu Java Predicate
- Abstrakte Klasse und Interface in Java
- Zugriffsmodifikatoren (Access modifiers) in Java
- Die Anleitung zu Java Enum
- Die Anleitung zu Java Annotation
- Vergleichen und Sortieren in Java
- Die Anleitung zu Java String, StringBuffer und StringBuilder
- Die Anleitung zu Java Exception
- Die Anleitung zu Java Generics
- Manipulieren von Dateien und Verzeichnissen in Java
- Die Anleitung zu Java BiPredicate
- Die Anleitung zu Java Consumer
- Die Anleitung zu Java BiConsumer
- Was ist erforderlich, um mit Java zu beginnen?
- Geschichte von Java und der Unterschied zwischen Oracle JDK und OpenJDK
- Installieren Sie Java unter Windows
- Installieren Sie Java unter Ubuntu
- Installieren Sie OpenJDK unter Ubuntu
- Installieren Sie Eclipse
- Installieren Sie Eclipse unter Ubuntu
- Schnelle lernen Java für Anfänger
- Geschichte von Bits und Bytes in der Informatik
- Datentypen in Java
- Bitweise Operationen
- if else Anweisung in Java
- Switch Anweisung in Java
- Schleifen in Java
- Die Anleitung zu Java Array
- JDK Javadoc im CHM-Format
- Vererbung und Polymorphismus in Java
- Die Anleitung zu Java Function
- Die Anleitung zu Java BiFunction
- Beispiel für Java Encoding und Decoding mit Apache Base64
- Die Anleitung zu Java Reflection
- Java-Remote-Methodenaufruf - Java RMI
- Die Anleitung zu Java Socket
- Welche Plattform sollten Sie wählen für Applikationen Java Desktop entwickeln?
- Die Anleitung zu Java Commons IO
- Die Anleitung zu Java Commons Email
- Die Anleitung zu Java Commons Logging
- Java System.identityHashCode, Object.hashCode und Object.equals verstehen
- Die Anleitung zu Java SoftReference
- Die Anleitung zu Java Supplier
- Java Aspect Oriented Programming mit AspectJ (AOP)
Show More
- Anleitungen Java Servlet/JSP
- Die Anleitungen Java Collections Framework
- Java API für HTML & XML
- Die Anleitungen Java IO
- Die Anleitungen Java Date Time
- Anleitungen Spring Boot
- Anleitungen Maven
- Anleitungen Gradle
- Anleitungen Java Web Services
- Anleitungen Java SWT
- Die Anleitungen JavaFX
- Die Anleitungen Oracle Java ADF
- Die Anleitungen Struts2 Framework
- Anleitungen Spring Cloud