真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java8新特性的lambda,函數(shù)式接口,StreamingAPI

這篇文章將為大家詳細(xì)講解有關(guān)Java8新特性的lambda,函數(shù)式接口,StreamingAPI,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司主營(yíng)平谷網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,平谷h5小程序開發(fā)搭建,平谷網(wǎng)站營(yíng)銷推廣歡迎平谷等地區(qū)企業(yè)咨詢

Lambda表達(dá)式

1.是對(duì)匿名內(nèi)部類對(duì)象的一種格式的簡(jiǎn)化

2.Java8中引入了一個(gè)新的運(yùn)算符"->",稱為箭頭運(yùn)算符,或者lambda運(yùn)算符

3.作用就是分割前后兩部分的

4.左邊:表示的是Lambda表達(dá)式的參數(shù)列表(接口中,定義的抽象方法的參數(shù))

5.右邊:表示的是方法的方法體,Lambda體

語(yǔ)法格式的書寫

1.沒(méi)有參數(shù),也沒(méi)有返回值

左面的小括號(hào)不能省,右邊的大括號(hào)可以省略也可以不用省

Java8新特性的lambda,函數(shù)式接口,StreamingAPI

2.有一個(gè)參數(shù),沒(méi)有返回值

有多個(gè)參數(shù),沒(méi)有返回值

左邊的括號(hào) 可省可不省,右邊的大括號(hào)可以省也可以不用省

Java8新特性的lambda,函數(shù)式接口,StreamingAPI

3.接口中需要重寫的方法內(nèi)容有很多,需要給多句話的加上大括號(hào)

Java8新特性的lambda,函數(shù)式接口,StreamingAPI

注意事項(xiàng):如果Lambda體中的語(yǔ)句有只有一句,那么大括號(hào)可以省略不寫;如果大擴(kuò)號(hào)中只有一條語(yǔ)句,并并且是return語(yǔ)句,那么return關(guān)鍵字可以省略不寫

函數(shù)式接口

Lambda表達(dá)式使用的前提,就是接口必須是函數(shù)式接口,如果在接口中,只有一個(gè)抽象方法,那么這個(gè)接口就是函數(shù)式接口,常用一個(gè)注解來(lái)檢查當(dāng)前接口是否是一個(gè)函數(shù)式接口@FunctionalInterface,如果不是函數(shù)式接口,則編譯報(bào)錯(cuò)

作用:

想表達(dá)的是一個(gè)方法的內(nèi)容,由于方法不在任何類中,所有被稱為函數(shù),接口其實(shí)想表達(dá)的就一個(gè)函數(shù)的聲明,接下來(lái)的使用這個(gè)接口的實(shí)現(xiàn)類對(duì)象,來(lái)表達(dá)一個(gè)函數(shù)的體現(xiàn)

消費(fèi)型接口:

抽象方法:void accept(T t)

當(dāng)某個(gè)函數(shù)可以接受一個(gè)數(shù)據(jù),并且處理這個(gè)數(shù)據(jù),處理完成之后,就不需要返回任何數(shù)據(jù),這個(gè)函數(shù)需要當(dāng)做數(shù)據(jù)來(lái)進(jìn)行傳遞,就使用消費(fèi)型接口

package cn.ujiuye.function;
import java.util.function.Consumer;
import cn.ujiuye.domin.Mobile;
/**
 * @author liugang
 * 消費(fèi)型接口方式
 */
public class CustmoerTest {
     public static void main(String[] args) {
	    Mobile m = new Mobile("華為",3000);
	     //lambad表達(dá)式實(shí)現(xiàn)賦值  內(nèi)部顯然是對(duì)消費(fèi)者接口的使用,故是對(duì)函數(shù)式接口編程的新東西
	     updateMobile(m, x -> x.setPrice(x.getPrice() + 1000 ));
	     System.out.println(m);
	 }
    //調(diào)用其使用的方法
	private static void updateMobile(Mobile m, Consumer con) {
	     for (int i = 0; i < 3; i++) {
		     con.accept(m);	
		 }
	}
}

方法引用

1.寫一個(gè)函數(shù)式接口時(shí),方法的實(shí)現(xiàn),已經(jīng)被某個(gè)其他的對(duì)象實(shí)現(xiàn)了,就不需要在Lambda中了,再次調(diào)用這個(gè)實(shí)現(xiàn),而可以那個(gè)直接定義好的方法了

2.格式

函數(shù)式接口: 名稱 = 對(duì)象名 :: 方法名稱

函數(shù)式接口: 名稱 = 類名::靜態(tài)方法名

3.作用

把已經(jīng)實(shí)現(xiàn)的當(dāng)做一個(gè)數(shù)據(jù),作為一個(gè)引用,賦值給某個(gè)函數(shù)式接口的引用,可以把這個(gè)引用當(dāng)做方法的返回值,也可以作為一個(gè)實(shí)現(xiàn)類對(duì)象

Java8新特性的lambda,函數(shù)式接口,StreamingAPI

StreamingAPI

在jdk1.8中,提供了一個(gè)stream類型,可以很方便的操作容器中的數(shù)據(jù),不需要手動(dòng)定義循環(huán)就可以完成對(duì)數(shù)據(jù)的過(guò)濾,輸出及其其他的操作

Stream的類型的獲取和常用方法

Collection的獲?。?/p>

調(diào)用stream()方法,調(diào)回Stream對(duì)象

終止方法:foreach count

延遲方法:filter limit skip 等

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) {
    	//定義一個(gè)集合,并獲取stream類型的數(shù)據(jù)
		List list = new ArrayList();
		Collections.addAll(list, 12,32,-13,50,100);
		Stream 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 list = new ArrayList<>();
	   Collections.addAll(list, -4,-12,-199,0,15,25,36,100);
	   Stream stream = list.stream();
	   stream.filter(x -> x > 0)    //過(guò)濾
	         .skip(1)               //跳過(guò)
	         .limit(2)              //限制
	         .sorted((x,y) -> -1)   //排序
	         .forEach(System.out::println);
   }
}

練習(xí)

有兩個(gè)Arraylist集合,存儲(chǔ)隊(duì)伍中的多個(gè)成員姓名,使用Stream方式,對(duì)以下步驟進(jìn)行操作

1、第一個(gè)隊(duì)伍只要名字為3個(gè)字的成員姓名

2、第一個(gè)隊(duì)伍只要篩選之后的前三個(gè)人

3、第二個(gè)隊(duì)伍只要姓張的

4、第二個(gè)隊(duì)伍篩選之后不要前兩個(gè)人

5、將兩個(gè)隊(duì)伍合并成一個(gè)隊(duì)伍

6、合并之后的隊(duì)伍中的所有人的Person(自定義類型)對(duì)象,存儲(chǔ)到一個(gè)ArrayList集合中

隊(duì)伍1:宮本武藏、宋公明、蘇有朋、石頭人、時(shí)傳祥、李耳、莊子、洪七公

隊(duì)伍2:帕瓦羅蒂、張三瘋、趙薇薇、張自忠、孛兒只斤鐵木真、張?zhí)鞇?、張翠?/p>

public class StreamApiTest {
    @SuppressWarnings("unused")
	public static void main(String[] args) {
	    //創(chuàng)建集合
    	List list1 = new ArrayList();
	    List list2 = new ArrayList();
	    //把元素添加到集合中
	    Collections.addAll(list1, "宮本武藏","宋公明","蘇有朋","石頭人","時(shí)傳祥","李耳","莊子","洪七公");
	    Collections.addAll(list2, "帕瓦羅蒂","張三瘋","趙薇薇","張自忠","孛兒只斤鐵木真","張?zhí)鞇?,"張翠花");
	    //創(chuàng)建Stream對(duì)象
	    Stream stream1 = list1.stream();
	    Stream stream2 = list2.stream();
	    //創(chuàng)建篩選后的元素
	    Stream limit1 = stream1.filter(x -> x.length() == 3).limit(3);
	    Stream limit2 = stream2.filter(x -> x.startsWith("張")).skip(2);
	    //將兩對(duì)的人合到同一個(gè)對(duì)里
	    Stream concat = Stream.concat(limit1, limit2);
	    //定義一個(gè)集合用來(lái)存對(duì)象
	    List list = new ArrayList();
	    //想要的是一個(gè)Person對(duì)象的流
	    //Stream map = concat.map(x -> new Person(x);
	    Stream map = concat.map(Person::new);
	    //將流對(duì)象添加到集合中
	    map.forEach(list::add);
	    System.out.println(list);
	}
}

關(guān)于Java8新特性的lambda,函數(shù)式接口,StreamingAPI就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


本文題目:Java8新特性的lambda,函數(shù)式接口,StreamingAPI
當(dāng)前路徑:http://weahome.cn/article/iegops.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部