[Effective Java 3rd Edition](https://www.amazon.co.jp/Effective-Java-%E7%AC%AC3%E7%89%88-%E3%], qui est un livre indispensable pour les utilisateurs Java intermédiaires et supérieurs. 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) a une version Kindle, donc je vais le résumer.
Précédent: Enum et annotations du chapitre 6 de Java 3rd Edition effective Suivant: Méthodes efficaces du chapitre 8 de Java 3rd Edition
//Classe anonyme
Collections.sort(words, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
});
//Utiliser lambda
Collections.sort(words, (o1, o2) -> Integer.compare(o1.length(), o2.length()));
//Comparer la méthode de construction
Collections.sort(words, comparingInt(String::length));
//Encore plus court en Java 8
words.sort(comparingInt(String::length));
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)
}
}
--Type de référence de méthode
--statique ・ ・ ・ ʻInteger :: parseInt --Bound ・ ・ ・ ʻInstant.now () :: isAfter
String :: toLowerCase
TreeMap <K, V> :: nouveau
--Constructeur de tableaux ・ ・ ・ ʻint [] :: new`
--Si la référence de méthode est plus courte et plus claire, utilisez la référence de méthode, sinon utilisez le lambda.--java.util.Function
a 43 interfaces, dont toutes ne peuvent pas être mémorisées, mais tant que vous vous souvenez des 6 interfaces de base, le reste des interfaces peut être dérivé si nécessaire.
L'interface --ʻOperator` représente une fonction dont le type résultant est le même que l'argument.
Predicate
prend un argument et renvoie un booléen.Function
renvoie un type différent de l'argument.Fournisseur
ne prend aucun argument et renvoie une valeur. (Fournir des résultats)Consumer
prend un argument et ne renvoie rien. (Consommer des arguments)interface | Signature de fonction | Exemple |
---|---|---|
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 |
forEach
doit être utilisée uniquement pour afficher le résultat, pas pour effectuer le calcul.toSet
, toMap
, groupingBy
, join
.--Au moment de la sortie de Java, il avait la synchronisation et attendre / notifier
, et un support de thread intégré.
--Java5 a introduit la bibliothèque java.util.concurrent
avec des collections simultanées et un framework d'exécuteur.
--Java7 a introduit un framework fork-join
haute performance pour le fractionnement en parallèle.
parallel
..parallel ()
est nombre de cœurs sur la machine-1
.Parallélisation du pipeline de flux pour compter les nombres premiers
static long pi(long n) {
return LongStream.rangeClosed(2, n)
.parallel()
.mapToObj(BigInteger::valueOf)
.filter(i -> i.isProbablePrime(50))
.count();
}
Recommended Posts