Heim  >  Artikel  >  Java  >  Java8 neue Funktionen Lambda, funktionale Schnittstelle, StreamingAPI

Java8 neue Funktionen Lambda, funktionale Schnittstelle, StreamingAPI

(*-*)浩
(*-*)浩nach vorne
2019-10-23 16:12:152570Durchsuche

Java8 neue Funktionen Lambda, funktionale Schnittstelle, StreamingAPI

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.

Java8 neue Funktionen Lambda, funktionale Schnittstelle, StreamingAPI
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

Java8 neue Funktionen Lambda, funktionale Schnittstelle, StreamingAPI3. 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

Java8 neue Funktionen Lambda, funktionale Schnittstelle, StreamingAPIHinweis 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 Schnittstelle

Die 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 Methodenname

3. 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 Implementierungsklassenobjekt

StreamingAPI

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ückJava8 neue Funktionen Lambda, funktionale Schnittstelle, StreamingAPI

Beendigungsmethode: foreach count

Verzö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ühren

1. 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üfung

3. 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 Qigong

Team 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Vorheriger Artikel:Schnelle Sortierung in JavaNächster Artikel:Schnelle Sortierung in Java