Da es sich um ein persönliches Memo handelt, kann es entsprechend hinzugefügt oder unbeaufsichtigt gelassen werden.
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.
Das sieht nach einer mysteriösen Syntax aus, aber genau das ist es. So wie "neuer String (Daten)" als "String :: new" geschrieben werden kann.
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.
Da es nicht "serialisierbar" ist, ist es besser, einen normalen Wert mit "@ Nullable" zu verwenden.
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
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);
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
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;
}
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);
catch (IOException ex) {
throw new UncehckedIOException(ex);
}
@VisibleForTesting
String createId(String seed) {
}
Recommended Posts