Um das Java-Wissen zu aktualisieren, das bei "1.4" gestoppt wurde Ich lerne etwas über Java7,8,9. Dieses Mal werde ich nur beschreiben, was ich über die in "8" hinzugefügten Funktionen untersucht habe.
Optional Es ist jetzt möglich, explizit anzugeben, ob der Rückgabewert null enthalten darf. Sie können auch festlegen, was zu tun ist, wenn beim Abrufen kein Wert vorhanden ist.
public Optional<String> getGyunyu(String name) {
Map<String, String> gyunyu = new HashMap<>();
gyunyu.put("Milch", "コーヒーMilch");
return Optional.ofNullable(gyunyu.get(name));
}
Optional<String> gyunyu = getGyunyu("Tee");
System.out.println(gyunyu.orElse("Nicht Milch")); // 「Nicht Milch」が出力される
--ofNullable (T-Wert): Optional generieren. Wenn der Wert nicht null ist, wird eine Option zurückgegeben, die den Wert beschreibt, andernfalls wird eine leere Option zurückgegeben. --orElse (T other): Gibt den Wert zurück, falls vorhanden, andernfalls wird other zurückgegeben.
Sie können das Vorhandensein eines Werts auch mit der Methode isPresent ()
überprüfen.
Optional<String> gyunyu = getGyunyu("Tee");
if (!gyunyu.isPresent()) {
System.out.println("Nicht Milch");
}
In diesem Fall ist es meines Erachtens nicht viel anders als "if (Rückgabewert == null)", aber wenn es null ist, sollte der Wert wiederholt werden. Es scheint, dass es verwendet werden kann, wenn Sie zusätzliche Verarbeitung durchführen möchten.
interface Schnittstelle kann jetzt eine Implementierung haben. Durch Schreiben des Standardschlüsselworts können Sie eine Methode mit einer Implementierung schreiben.
Gyunyu.java
public interface Gyunyu {
public default void print() {
System.out.println("Milch");
}
}
Coffee.java
public class Coffee implements Gyunyu {
//Ich habe die Druckmethode nicht überschrieben, erhalte jedoch keinen Kompilierungsfehler
}
Gyunyu gyunyu = new Coffee();
gyunyu.print();
Erstellen Sie eine "Milk" -Schnittstelle, die die "Gyunyu" -Schnittstelle und erbt Wenn Sie es in der Ichigo-Klasse implementieren und die print () -Methode aufrufen,
Milk.java
public interface Milk extends Gyunyu {
public default void print() {
System.out.println("Milch");
}
}
Ichigo.java
public class Ichigo implements Milk {
}
Gyunyu gyunyu = new Ichigo();
gyunyu.print(); //"Milch" wird ausgegeben
Die Methode, die der Klasse am nächsten kommt, die die Methode aufruft (in diesem Fall die Milk
-Schnittstelle print ()
), wird ausgeführt.
Date and Time API
Sie können das aktuelle Datum und die aktuelle Uhrzeit mithilfe der Methode "now ()" abrufen.
//Keine Zeitzoneninformationen
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime.getYear());
System.out.println(localDateTime.getMonthValue());
System.out.println(localDateTime.getDayOfMonth());
System.out.println(localDateTime.getHour());
System.out.println(localDateTime.getMinute());
System.out.println(localDateTime.getSecond());
System.out.println(localDateTime.getNano());
//Mit Zeitzoneninformationen
ZonedDateTime zoneDatetime = ZonedDateTime.now();
System.out.println(zoneDatetime.getYear());
System.out.println(zoneDatetime.getMonthValue());
System.out.println(zoneDatetime.getDayOfMonth());
System.out.println(zoneDatetime.getHour());
System.out.println(zoneDatetime.getMinute());
System.out.println(zoneDatetime.getSecond());
System.out.println(zoneDatetime.getNano());
System.out.println(zoneDatetime.getZone().getId()); // 「Asia/"Tokyo" wird ausgegeben
JapaneseDate japaneseDate = JapaneseDate.now();
System.out.println(japaneseDate.getEra()); //"Heisei" wird ausgegeben
System.out.println(japaneseDate.get(ChronoField.YEAR_OF_ERA)); //"29" wird angezeigt
LocalDateTime localDateTime = LocalDateTime.now();
LocalDateTime tomorrow = localDateTime.plusDays(1);
System.out.println(tomorrow.getDayOfMonth()); //"30" wird ausgegeben, wenn es am 29. November ausgeführt wird
LocalDateTime yesterday = localDateTime.minusDays(1);
System.out.println(yesterday.getDayOfMonth()); //"28" wird ausgegeben, wenn es am 29. November ausgeführt wird
Es wird jetzt standardmäßig unterstützt.
String coffee = "Kaffee Milch";
Encoder encoder = Base64.getEncoder();
String encodeCoffee = encoder.encodeToString(coffee.getBytes());
System.out.println(encodeCoffee); //"44Kz44O844OS44O854mb5Lmz" wird ausgegeben
Decoder decoder = Base64.getDecoder();
String decodeCoffee = new String(decoder.decode(encodeCoffee));
System.out.println(decodeCoffee); //"Kaffeemilch" wird ausgegeben
Mit String.join ()
ist es jetzt möglich, mehrere Strings einfach mit einem beliebigen String zu verbinden.
String[] gyunyu = {"Kaffee Milch", "Remon Milch", "Erdbeermilch"};
System.out.println(String.join("###", gyunyu)); //"Kaffee Milch###Remon Milch###Ausgabe mit "Erdbeermilch"
List<String> gyunyu = new ArrayList<>();
gyunyu.add("Kaffee Milch");
gyunyu.add("Remon Milch");
gyunyu.add("Erdbeermilch");
System.out.println(String.join("###", gyunyu)); //"Kaffee Milch###Remon Milch###Ausgabe mit "Erdbeermilch"
Ähnliche Verknüpfungen können mit der Klasse "java.util.StringJoiner" vorgenommen werden.
StringJoiner gyunyu = new StringJoiner("###");
gyunyu.add("Kaffee Milch");
gyunyu.add("Remon Milch");
gyunyu.add("Erdbeermilch");
System.out.println(gyunyu); //"Kaffee Milch###Remon Milch###Ausgabe mit "Erdbeermilch"
Die StringJoiner-Klasse kann auch durch Angabe eines Präfixes und eines Suffixes verbunden werden.
StringJoiner gyunyu = new StringJoiner(" > ", "[Mögen]", "[Hass]");
gyunyu.add("Kaffee Milch");
gyunyu.add("Remon Milch");
gyunyu.add("Erdbeermilch");
System.out.println(gyunyu); //「[Mögen]Kaffee Milch>Remon Milch>Erdbeermilch[Hass]Wird ausgegeben
Es wird in der folgenden Grammatik beschrieben.
(Methodenargumente) -> {wird bearbeitet}
Durch die Verwendung des Lambda-Ausdrucks scheint der Prozess präzise geschrieben zu werden ... Wenn es die folgende Schnittstelle und Verarbeitung gibt
public interface Gyunyu {
public void output(String v);
}
Gyunyu gyunyu = new Gyunyu() {
@Override
public void output(String v) {
System.out.println(v);
}
};
gyunyu.output("Kaffee Milch"); //「Kaffee Milch」と出力される
Unter Verwendung des Lambda-Ausdrucks kann die Beschreibung wie folgt lauten.
Gyunyu gyunyu = (String v) -> { System.out.println(v); };
gyunyu.output("Kaffee Milch"); //「Kaffee Milch」と出力される
Darüber hinaus wird der Argumenttyp abgeleitet und kann weggelassen werden. Wenn es nur ein Argument gibt, können auch die Klammern "()" weggelassen werden. Wenn es nur einen Ausdruck gibt, kann die wellenförmige Klammer "{}" weggelassen werden, sodass die Beschreibung wie folgt lauten kann.
Gyunyu gyunyu = v -> System.out.println(v);
gyunyu.output("Kaffee Milch");
Eine Schnittstelle, die nur eine abstrakte Methode deklariert. Wenn die im Lambda-Ausdruck geschriebene Gyunyu-Schnittstelle zu einer funktionalen Schnittstelle gemacht wird, Die Beschreibung lautet wie folgt.
Gyunyu.java
@FunctionalInterface
public interface Gyunyu {
public void output(String s);
}
Durch Hinzufügen der Annotation @ FunctionalInterface
kann explizit angegeben werden, dass es sich um eine funktionale Schnittstelle handelt.
Es kann ein Kompilierungsfehler ausgegeben werden, wenn die Bedingungen der Funktionsschnittstelle nicht erfüllt sind.
Da das Argument in der Methodenreferenz weggelassen werden kann, kann der Umfang der Beschreibung im Vergleich zum Lambda-Ausdruck reduziert werden. Ausführen einer statischen Methode oder einer Instanzmethode.
--Notationsmethode
Klassenname (Instanzname) :: Methodenname
Gyunyu gyunyu = System.out::println;
gyunyu.output("Kaffee Milch"); //「Kaffee Milch」と出力される
Wenn das Obige durch einen Lambda-Ausdruck beschrieben wird, kann es wie folgt beschrieben werden.
Gyunyu gyunyu = v -> System.out.println(v);
gyunyu.output("Kaffee Milch");
Wenn die Methode, auf die Sie verweisen möchten, Ihre eigene Klasse ist, verwenden Sie "this"
Main.java
public void println(String v) {
System.out.println(v);
}
public void execute() {
List<String> gyunyu = Arrays.asList("Kaffee Milch", "Erdbeermilch", "Remon Milch");
gyunyu.forEach(this::println);
}
public static void main(String[] args) {
(new Main()).execute();
}
Main.java
public static void output(String v) {
System.out.println(v);
}
public static void main(String[] args) {
List<String> gyunyu = Arrays.asList("Kaffee Milch", "Erdbeermilch", "Remon Milch");
gyunyu.forEach(Main::output);
}
Stream API Eine API, die Werte aggregieren und die Verarbeitung mithilfe von Daten durchführen kann. Der grundlegende Verarbeitungsablauf ist
String[] gyunyu1 = {"Kaffee Milch", "Kaffee Milch", "Erdbeermilch", "Erdbeermilch", "Remon Milch", "Zitronenmilch"};
Stream<String> stream1 = Arrays.stream(gyunyu1);
String[] gyunyu2 = {"Melonenmilch", "Apfelmilch", "Melonenmilch", "Traubenmilch"};
Stream<String> stream2 = Stream.of(gyunyu2);
List<String> gyunyu3 = Arrays.asList("Früchte", "Banane", "Suika");
Stream<String> stream3 = gyunyu3.stream();
Map<String, String> gyunyu4 = new HashMap<>();
gyunyu4.put("1", "Oberschenkelmilch");
gyunyu4.put("2", "Biwa");
gyunyu4.put("3", "Ichijiku Milch");
Stream<Entry<String, String>> stream4 = gyunyu4.entrySet().stream();
Referenz: Stream-Generierung
Verarbeitung zum Eingrenzen und Bearbeiten von Steam und Erstellen eines neuen Streams.
--Wenn Sie die Elemente eingrenzen
//Ich möchte nur Zeichenketten extrahieren, die Milch enthalten
String[] gyunyu1 = {"Kaffee Milch", "Kaffee Milch", "Erdbeermilch", "Erdbeermilch", "Remon Milch", "Zitronenmilch"};
Stream<String> stream1 = Arrays.stream(gyunyu1);
stream1.filter(s -> s.contains("Milch"));
//Ich möchte doppelte Milch entfernen
String[] gyunyu2 = {"Melonenmilch", "Apfelmilch", "Melonenmilch", "Traubenmilch"};
Stream<String> stream2 = Stream.of(gyunyu2);
stream2.distinct();
--Wenn Sie Elemente konvertieren möchten
map
-Methode abrufen.//Ich möchte Milch hinzufügen
List<String> gyunyu3 = Arrays.asList("Früchte", "Banane", "Suika");
Stream<String> stream3 = gyunyu3.stream();
stream3.map(s -> s + "Milch");
Referenz: Zwischenoperation
Wenn der Beendigungsprozess ausgeführt wird, wird der Zwischenprozess ausgewertet.
//Ich möchte die Anzahl der Fälle einschließlich Milch ausgeben
Map<String, String> gyunyu4 = new HashMap<>();
gyunyu4.put("1", "Oberschenkelmilch");
gyunyu4.put("2", "Biwa");
gyunyu4.put("3", "Ichijiku Milch");
Stream<Entry<String, String>> stream4 = gyunyu4.entrySet().stream();
System.out.println(stream4.filter(s -> s.getValue().contains("Milch")).count()); //"2" wird ausgegeben
--Wenn Sie Elemente einzeln herausnehmen und bedienen möchten
String[] gyunyu1 = {"Kaffee Milch", "Kaffee Milch", "Erdbeermilch", "Erdbeermilch", "Remon Milch", "Zitronenmilch"};
Stream<String> stream1 = Arrays.stream(gyunyu1);
stream1.filter(s -> s.contains("Milch")).forEach(s -> System.out.println(s));
Referenz: Terminierungsverarbeitung
Da der Dienst, für den ich im Geschäft verantwortlich bin, auf Java 5 und 6 ausgeführt wird, habe ich nicht die Möglichkeit, 8 im Geschäft zu verwenden. Ich möchte die Gelegenheit nutzen, um es zu aktualisieren. Ich bin noch nicht mit der Stream-API und den Lambda-Ausdrücken vertraut, daher muss ich mehr über diese beiden Funktionen erfahren.
Recommended Posts