Java-Muster-Memo

Da es sich um ein persönliches Memo handelt, kann es entsprechend hinzugefügt oder unbeaufsichtigt gelassen werden.

List.of statt Arrays.asList

Ab JDK9 ist es besser, "List.of" als "Arrays.asList" zu verwenden. Die von "Arrays.asList" zurückgegebene "Liste" ist nur ein Wrapper für das Array, dessen Größe festgelegt ist, mit dem Sie jedoch die Elemente ändern können. Andererseits kann die von "List.of" zurückgegebene "Liste" das Element nicht ändern und wird unveränderlich.

n-> new int [n] ist int [] :: new

Das sieht nach einer mysteriösen Syntax aus, aber genau das ist es. So wie "neuer String (Daten)" als "String :: new" geschrieben werden kann.

Verwenden Sie keine Felder für die funktionale Schnittstelle

final Function<String, Price> CONVERT_STRING_TO_PRICE = 
  str -> str.substring(0, str.length() - 1).transfer(Price::of);

Definieren Sie das Feld

return inputs.stream()
  .map(CONVERT_STRING_TO_PRICE)
  .collect(toList());

Es kann so verwendet werden.

Dies definiert jedoch normalerweise eine Methode.

Price stringToPrice(String str) {
  return str.substring(0, str.length() - 1).transfer(Price::of);
}

Es ist besser, Methodenreferenzen zu verwenden.

return inputs.stream()
  .map(Converters::stringToPrice)
  .collect(toList());

Sie können Kommentare in JavaDoc ordnungsgemäß schreiben, und Methoden sind einfacher zu lesen als Funktionen höherer Ordnung. Außerdem werden Lambdas schließlich zu Methodendefinitionen und Methodenreferenzen zusammengestellt, was etwas verschwenderisch ist.

Verwenden Sie Optional nicht für Felder

Da es nicht "serialisierbar" ist, ist es besser, einen normalen Wert mit "@ Nullable" zu verwenden.

Verwenden Sie Stream nicht als Rückgabewert

Sofern es sich nicht um eine Methode handelt, die mit Stream selbst ausgeführt wird, ist es besser, Stream nicht zurückzugeben. Standardmäßig können Sie "Stream " zurückgeben, aber etwas, das einen konkreten Typ wie "Stream " zurückgibt, ist nicht sehr gut. Oder wenn Sie eine "Stream-Verarbeitung" mit E / A wie Files.lines durchführen möchten.

Stream-Muster

Verwenden Sie IntStream, wenn Sie boolean [] oder char [] streamen möchten.

IntStream.range(0, chars.length)->mapToObject(i -> chars[i])

anyMatch

for (var a : list) {
  if (condition(a)) {
    return true;
  }
}
return false

return list.stream().anyMatch(this::condition);

allMatch

for (var a : list) {
  if (!condition(a)) {
    return false;
  }
}
return true

return list.stream().allMatch(this::condition);

noneMatch

for (var a : list) {
  if (condition(a)) {
    return false;
  }
}
return true

return list.stream().noneMatch(this::condition);

Setzen Sie Stream oder Liste nicht in Optional

Da Optional eine spezielle Sammlung von Elementen 0 oder 1 ist, muss Stream oder List nicht weiter eingeschlossen werden, und Stream.of () oder emptyList () sollte damit umgehen können.

if

Normales System und abnormales System

Dann das normale System, sonst das abnormale System

if (cond) {
  proc
} else {
  error
}

Wenn das abnormale System jedoch in einer Zeile zurückkehrt / wirft, setzen Sie das abnormale System in if und entkommen Sie frühzeitig.

if (!cond) {
  throw error
}
proc

!(aa && bb)

Es ist besser, eine Inversion zu vermeiden, indem Sie sie in große Klammern wie "! (Aa && bb)" setzen

if (!(hasValue && isValid)) {
  error
}

Als

if (!hasValue || !isValid) {
  error
}

Sie müssen die Ergebnisse nicht in Ihrem Gehirn zwischenspeichern. Wenn jedoch "else" angehängt ist

if (!hasValue || !isValid) {
  error
} else {
  proc
}

Als

if (hasValue && isValid) {
  proc
} else {
  error
}

Muss nicht rückgängig gemacht werden. In diesem Fall wird auch die Richtlinie zum Ändern des normalen Systems auf dann befolgt. Es ist auch besser, dies nicht von Hand zu tun, da die IDE diese Art der logischen Umkehrung durchführen sollte.

enum

Wenn es Parameter hat, fügen Sie "@ AllArgsConstructor" und "@ Getter" hinzu. @ Value kann nicht für enum verwendet werden.

@AllArgsConstructor
@Getter
enum Hoge {
  A("a-desu"),
  B("b-dayo");

  private String message;
}

Integer.valueOf gibt Integer zurück

Der valueOf von Integer und Long gibt ein Wrapper-Objekt zurück. Code wie dieser ist also nutzlos

int n = Integer.valueOf(str);

Verwenden Sie parseInt, wenn Sie es als Grundelement verwenden möchten

int n = Integer.parseInt(str);

Verwenden Sie UncheckedIOException, um IOException zu einer nicht aktivierten Ausnahme zu machen

catch (IOException ex) {
  throw new UncehckedIOException(ex);
}

Fügen Sie Visible For Testing hinzu, wenn Sie package private zum Testen verwenden

@VisibleForTesting
String createId(String seed) {
}

Recommended Posts

Java-Muster-Memo
Java-Memo
Java alles Memo
[Java] Strategiemuster
Java Silver Memo
Java-Entwurfsmuster
Java, Maven Memo
Java-Rückrufmuster
[Java] Singleton-Muster
Java SE 7 Hinweis
Java alles Memo 2
[Java] Adaptermuster
Java-Spezifikationsnotiz
Mein DAO-Muster (Java)
Memo zur Java-Entwicklungsumgebung
Java-Lernnotiz (Methode)
Java Kuche Day Memo
Java Se 8 Programmierer Ⅰ Memo
Java bezahlte private Memo
Java-Lernnotiz (grundlegend)
Java Lambda Ausdruck Memo
(Memo) Java für Anweisung
Java Lambda Ausdruck [Notiz schreiben]
Java-Lernnotiz (Schnittstelle)
[Java] Implizites Vererbungsprotokoll
Java-Lernnotiz (Vererbung)
Builder-Muster (effektives Java)
Programmiernotiz für Java-Wettbewerbe
[Memo] Java Linked List
Zusammenfassung des Java-Entwurfsmusters
[Java] Namensnotiz des Variablennamens
Java-Memo-Teilzeichenfolge (Standardklasse)
Java-Lernnotiz (Datentyp)
Länge des Java-Memos (Standardklasse)
Erstellen Sie eine Java-Methode [Memo] [java11]
Java Silver Prüfungsvorbereitungsnotiz
Java-Lernnotiz (logischer Operator)
Java
Enum Strategiemuster in Java
[Java] Zeichnen Sie ein einfaches Muster
Java-Lernnotiz (abstrakte Klasse)
Java Study Memo 2 mit Progate
Java
Java HashMap, entrySet [Persönliches Memo]
Entwurfsmuster nach Ruby Template-Methode Musternotiz
Java-Lernnotiz (Erstellen eines Arrays)
Persönliches Memo: Metaprogrammierung mit Java-Reflexion
JCA-Verwendungsprotokoll (Java Encryption Architecture)
[Java] Memo zum Benennen von Klassennamen
[Memo zur Studiensitzung] Java Day Tokyo 2017
Java-Lernnotiz (while-Anweisung, do-while-Anweisung)
Von Java zu VB.NET-Writing Kontrastmemo-
Stolpern von Java-Anfänger [Memo schreiben]
JNA-Mustersammlung (Java Native Access)
Java-Anfänger-Entwurfsmuster (Factory-Methodenmuster)
[Java] Memo zur Verarbeitungszeitmessmethode
Ich habe versucht, Java Memo LocalDate zu verwenden