[Effective Java 3rd Edition](https://www.amazon.co.jp/Effective-Java-%E7%AC%AC3%E7%89%88-%E3%], ein Muss für fortgeschrittene Java-Benutzer und höher 82% B8% E3% 83% A7% E3% 82% B7% E3% 83% A5% E3% 82% A2% E3% 83% BB% E3% 83% 96% E3% 83% AD% E3% 83% 83% E3% 82% AF-ebook / dp / B07RHX1K53) hat eine Kindle-Version, daher werde ich sie zusammenfassen.
Zurück: Effektive Java 3rd Edition, Kapitel 6, Aufzählung und Anmerkungen Weiter: Effektive Java 3rd Edition Kapitel 8 Methoden
//Anonyme Klasse
Collections.sort(words, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
});
//Verwenden Sie Lambda
Collections.sort(words, (o1, o2) -> Integer.compare(o1.length(), o2.length()));
//Vergleicher Bauweise
Collections.sort(words, comparingInt(String::length));
//Noch kürzer in Java 8
words.sort(comparingInt(String::length));
--Beispiel einer Aufzählung mit Funktionsobjektfeldern und konstantenspezifischem Verhalten.
public enum Operation {
PLUS("+", (x, y) -> x + y),
MINUS("-", (x, y) -> x + y),
TIMES("*", (x, y) -> x + y),
DIVIDE("/", (x, y) -> x + y);
private final String symbol;
private final DoubleBinaryOperator op;
Operation(String symbol, DoubleBinaryOperator op) {
this.symbol = symbol;
this.op = op;
}
@Override public String toString() {
return symbol;
}
public double apply(double x, double y) {
return op.applyAsDouble(x, y)
}
}
Integer :: parseInt
--Bound ・ ・ ・ Instant.now () :: isAfter
--Ungebunden ・ ・ ・ String :: toLowerCase
TreeMap <K, V> :: new
--Array-Konstruktor ・ ・ ・ int [] :: new
--Wenn die Methodenreferenz kürzer und klarer ist, verwenden Sie die Methodenreferenz, andernfalls das Lambda.--java.util.Function
verfügt über 43 Schnittstellen, an die sich alle nicht erinnern können. Solange Sie sich jedoch an die 6 grundlegenden Schnittstellen erinnern, können die restlichen Schnittstellen bei Bedarf abgeleitet werden.
Predicate
-Schnittstelle nimmt ein Argument und gibt einen Booleschen Wert zurück.Function
-Schnittstelle gibt einen anderen Typ als das Argument zurück.Consumer
-Schnittstelle nimmt ein Argument und gibt nichts zurück. (Argumente verbrauchen)Schnittstelle | Funktionssignatur | Beispiel |
---|---|---|
UnaryOperator |
T apply(T t) | String::toLowerCase |
BinaryOperator |
T apply(T t1, T t2) | BigInteger::add |
Predicate |
boolean test(T t) | Collection::isEmpty |
Function<T,R> | R apply(T t) | Arrays::asList |
Supplier |
T get() | Instant::now |
Consumer |
void accept(T t) | System.out::println |
java.util.concurrent
mit gleichzeitigen Sammlungen und Executor Framework eingeführt.Stream-Pipeline-Parallelisierung zum Zählen von Primzahlen
static long pi(long n) {
return LongStream.rangeClosed(2, n)
.parallel()
.mapToObj(BigInteger::valueOf)
.filter(i -> i.isProbablePrime(50))
.count();
}
Recommended Posts