Lambda-Ausdruck
Es ist eine Vereinfachung des Formats anonymer innerer Klassenobjekte
2. Ein neues wird in Java8 eingeführt Der Operator „->“ wird als Pfeiloperator oder Lambda-Operator bezeichnet.
3. Seine Funktion besteht darin, den vorderen und hinteren Teil in zwei Teile zu teilen die Parameterliste (Parameter der in der Schnittstelle definierten abstrakten Methode)
5. Die rechte Seite: stellt den Methodenkörper der Methode dar, Lambda-Körper
im Syntaxformat
1 .Es gibt keine Parameter und keinen Rückgabewert
Die linke Klammer kann nicht weggelassen werden und die rechte Klammer kann weggelassen werden oder nicht.
2 .Es gibt einen Parameter und keinen Rückgabewert
Es gibt mehrere Parameter und keinen Rückgabewert
Die linke Klammer kann weggelassen werden oder auch nicht und die rechte Klammer kann weggelassen werden oder auch nicht
3. Es gibt viele Methodeninhalte, die in der Benutzeroberfläche neu geschrieben werden müssen. Sie müssen geschweifte Klammern für mehrere Sätze hinzufügen
Hinweis Hinweis: Wenn es nur eine Anweisung im Lambda-Körper gibt, können die geschweiften Klammern weggelassen werden, wenn es nur eine Anweisung in der geschweiften Klammer gibt und es sich um eine Return-Anweisung handelt Das Schlüsselwort return kann weggelassen werden.
Funktionale SchnittstelleDie Voraussetzung für die Verwendung des Lambda-Ausdrucks ist, dass die Schnittstelle eine funktionale Schnittstelle sein muss, wenn nur eine abstrakte Methode vorhanden ist Die Schnittstelle ist eine funktionale Schnittstelle. Eine häufige Anmerkung lautet: Überprüfen Sie, ob die aktuelle Schnittstelle eine funktionale Schnittstelle ist. @FunctionalInterface Wenn es sich nicht um eine funktionale Schnittstelle handelt, wird ein Kompilierungsfehler gemeldet >Funktion:
Was Sie ausdrücken möchten, ist der Inhalt einer Methode, da die Methode keiner Klasse angehört, wird alles als Funktion bezeichnet. Was die Schnittstelle tatsächlich ausdrücken möchte, ist die Deklaration von Verwenden Sie als Nächstes das Implementierungsklassenobjekt dieser Schnittstelle, um die Verkörperung einer Funktion auszudrücken.Wenn eine Funktion Daten akzeptieren und verarbeiten kann, besteht nach Abschluss der Verarbeitung keine Notwendigkeit, Daten zurückzugeben. Diese Funktion muss als Daten übergeben werden. Verwenden Sie daher die Verbraucherschnittstelle
package cn.ujiuye.function; import java.util.function.Consumer; import cn.ujiuye.domin.Mobile; /** * @author liugang * 消费型接口方式 */ public class CustmoerTest { public static void main(String[] args) { Mobile m = new Mobile("华为",3000); //lambad表达式实现赋值 内部显然是对消费者接口的使用,故是对函数式接口编程的新东西 updateMobile(m, x -> x.setPrice(x.getPrice() + 1000 )); System.out.println(m); } //调用其使用的方法 private static void updateMobile(Mobile m, Consumer<Mobile> con) { for (int i = 0; i < 3; i++) { con.accept(m); } } }
Methodenreferenz
1. Beim Schreiben einer Funktionsschnittstelle wurde die Methode Die Implementierung wurde von einem anderen Objekt implementiert, sodass die Implementierung nicht erneut aufgerufen werden muss, aber die direkt definierte Methode kann verwendet werden
2. Format Funktion Funktionale Schnittstelle: Name = Objektname:: Methodenname Funktionale Schnittstelle: Name = Klassenname:: Statisch Methodenname3. Funktion
Behandeln Sie das, was implementiert wurde, als Referenz, wird einer Referenz auf eine funktionale Schnittstelle zugewiesen. Diese Referenz kann als Rückgabe verwendet werden Wert einer Methode oder als ImplementierungsklassenobjektStreamingAPI
In jdk1.8 wird ein Stream-Typ bereitgestellt, der die Daten einfach verarbeiten kann im Container. Datenfilterung, Ausgabe und andere Vorgänge können ohne manuelle Definition einer Schleife durchgeführt werden
Erfassung des Stream-Typs und gängiger Methoden
Erfassung der Sammlung:
Aufrufen der stream()-Methode und rufen Sie das Stream-Objekt zurück
Beendigungsmethode: foreach countVerzögerungsmethode: Filterlimit überspringen usw.package cn.ujiuye.stream; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Stream; /** * @author liugang * */ public class StreamApiDemo03Demo03 { public static void main(String[] args) { //定义一个集合,并获取stream类型的数据 List<Integer> list = new ArrayList<Integer>(); Collections.addAll(list, 12,32,-13,50,100); Stream<Integer> stream = list.stream(); stream.forEach(x ->System.out.println(x - 100)); System.out.println(list.stream().count()); } } package cn.ujiuye.stream; import java.util.ArrayList; import java.util.Collections; import java.util.stream.Stream; /** * @author liugang * Stream中一些方法的使用 */ public class StreamApiDemo04 { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); Collections.addAll(list, -4,-12,-199,0,15,25,36,100); Stream<Integer> stream = list.stream(); stream.filter(x -> x > 0) //过滤 .skip(1) //跳过 .limit(2) //限制 .sorted((x,y) -> -1) //排序 .forEach(System.out::println); } }Übung Es gibt zwei Arraylist-Sammlungen, die die Namen mehrerer Mitglieder im Team speichern. Verwenden Sie die Stream-Methode, um die folgenden Schritte auszuführen1. Das erste Team benötigt nur Mitglieder, deren Namen 3 Zeichen lang sind. 2. Das erste Team benötigt nur die ersten drei Personen nach der Überprüfung3. Die zweiten Teams benötigen nur Personen mit dem Nachnamen Zhang 4. Nachdem die zweite Mannschaft überprüft wurde, die ersten beiden Personen werden nicht benötigt 5. Führen Sie die beiden Teams zu einem Team zusammen 6. Nach der Zusammenführung werden Personenobjekte (benutzerdefinierter Typ) aller Mitglieder des Teams in einer ArrayList-Sammlung gespeichert Team 1: Miyamoto Musashi, Song Gongming, Su Youpeng, Stone Man, Shi Chuanxiang, Li Er, Zhuang Zi, Hong QigongTeam 2: Pavarotti, Zhang Sanfeng, Zhao Weiwei, Zhang Zizhong, Bole Jijin Temujin, Zhang Tianai, Zhang Cuihua
public class StreamApiTest { @SuppressWarnings("unused") public static void main(String[] args) { //创建集合 List<String> list1 = new ArrayList<String>(); List<String> list2 = new ArrayList<String>(); //把元素添加到集合中 Collections.addAll(list1, "宫本武藏","宋公明","苏有朋","石头人","时传祥","李耳","庄子","洪七公"); Collections.addAll(list2, "帕瓦罗蒂","张三疯","赵薇薇","张自忠","孛儿只斤铁木真","张天爱","张翠花"); //创建Stream对象 Stream<String> stream1 = list1.stream(); Stream<String> stream2 = list2.stream(); //创建筛选后的元素 Stream<String> limit1 = stream1.filter(x -> x.length() == 3).limit(3); Stream<String> limit2 = stream2.filter(x -> x.startsWith("张")).skip(2); //将两对的人合到同一个对里 Stream<String> concat = Stream.concat(limit1, limit2); //定义一个集合用来存对象 List<Person> list = new ArrayList<Person>(); //想要的是一个Person对象的流 //Stream<Person> map = concat.map(x -> new Person(x); Stream<Person> map = concat.map(Person::new); //将流对象添加到集合中 map.forEach(list::add); System.out.println(list); } }
Das obige ist der detaillierte Inhalt vonJava8 neue Funktionen Lambda, funktionale Schnittstelle, StreamingAPI. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!