java8的新特性怎么使用

這篇文章主要介紹“java8的新特性怎么使用”,在日常操作中,相信很多人在java8的新特性怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”java8的新特性怎么使用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

網(wǎng)站設(shè)計(jì)制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺(tái)管理系統(tǒng);成都網(wǎng)站制作、網(wǎng)站建設(shè)收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營(yíng)了10多年的創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司。

1)Lambda表達(dá)式

	概念:java8中增加了一個(gè)新的語(yǔ)法--Lambda表達(dá)式,并且引入了一個(gè)新的操作符(Lambda操作符): -> 
	
	Lambda操作符 -> :
		  -> 將Lambda表達(dá)式分為兩個(gè)部分:
			左側(cè):指定了Lambda表達(dá)式需要的參數(shù),參數(shù)的數(shù)據(jù)類型可以由編譯器的“類型推斷”機(jī)制推斷得出,故可以省略。
			右側(cè):指定了Lambda表達(dá)式的方法體,即Lambda表達(dá)式要執(zhí)行的功能。
	
	語(yǔ)法格式:
		
		格式一:無參數(shù),無返回值
				() -> System.out.println("Hello Lambda!");

		格式二:有一個(gè)參數(shù),并且無返回值
				(x) -> System.out.println(x)

		格式三:若只有一個(gè)參數(shù),小括號(hào)可以省略不寫
				x -> System.out.println(x)

		格式四:有兩個(gè)以上的參數(shù),有返回值,并且 Lambda 體中有多條語(yǔ)句
				(x, y) -> {
					System.out.println("函數(shù)式接口");
					return Integer.compare(x, y);
				};

		格式五:若 Lambda 體中只有一條語(yǔ)句, return 和 大括號(hào)都可以省略不寫
				(x, y) -> Integer.compare(x, y);

		格式六:Lambda 表達(dá)式的參數(shù)列表的數(shù)據(jù)類型可以省略不寫,因?yàn)镴VM編譯器通過上下文推斷出,數(shù)據(jù)類型,即“類型推斷”
				(Integer x, Integer y) -> Integer.compare(x, y);			
				
				

2)函數(shù)式接口

	概念:只有一個(gè)抽象方法(默認(rèn)方法與靜態(tài)方法除外)的接口,稱為函數(shù)式接口!
	
	補(bǔ)充:java8中,接口里可以有default方法(默認(rèn)方法)和static方法(靜態(tài)方法),實(shí)現(xiàn)類默認(rèn)會(huì)繼承defaul方法和static方法。
	
	聲明一個(gè)函數(shù)式接口:
	
		@FunctionalInterface
		public interface FirstInterface {
			void run();
		}
	
	說明:
		1)可以通過Lambda表達(dá)式來創(chuàng)建函數(shù)式接口的對(duì)象。
		2)可以在函數(shù)式接口上使用@FunctionalInterface注解,這樣我們就可以根據(jù)該注解來判斷這個(gè)接口是否是一個(gè)函數(shù)式接口。
		3)Java8內(nèi)置的四個(gè)核心函數(shù)式接口
				函數(shù)式接口				參數(shù)類型	返回類型	抽象方法			用途
			消費(fèi)型接口:Consumer<T>			T		void		void accept(T t)	對(duì)類型為T的對(duì)象執(zhí)行某一操作。
			供給型接口:Supplier<T>			無		T			T get()				返回類型為T的對(duì)象。
			函數(shù)型接口:Function<T, R>		T		R			R apply(T t)		對(duì)類型為T的對(duì)象執(zhí)行某一操作,并返回R類型的結(jié)果。
			斷言型接口:Predicate<T>		T		boolean		boolean test(T t)	確定類型為T的對(duì)象是否滿足某約束,并返回boolean值。
			
			eg:
				// 對(duì)String類型的對(duì)象執(zhí)行Lambda表達(dá)式(x -> System.out.println(x))的方法體。
				Consumer<String> strConsumer = x -> System.out.println(x);		// 創(chuàng)建一個(gè)Consumer(消費(fèi)型接口)的對(duì)象
				strConsumer.accept("Consumer的accept方法!");					// 執(zhí)行
			
				FirstInterface firstObj = () -> System.out.println("Hello Lambda!");
				firstObj.run();
			
	
3)方法引用

	方法引用:
		說明:
			1)若Lambda方法體中的功能,已經(jīng)有方法提供了實(shí)現(xiàn),則可以使用方法引用。
			2)使用操作符 :: 將方法名和對(duì)象或類的名字分隔開來。
			
		格式:
		?  對(duì)象名 :: 實(shí)例方法名
		?  類名   :: 靜態(tài)方法名
		?  類名   :: 實(shí)例方法名
		eg:
			Comparator<Integer> com1 = (x, y) -> Integer.compare(x, y);
			Comparator<Integer> com2 = Integer::compare;
	
	構(gòu)造器引用
		格式: 類名 :: new
		eg:
			Supplier<Student> sup1 = () -> new Student();
			Supplier<Student> sup2 = Student::new;
		
	數(shù)組引用
		格式: type[] :: new
		eg:
			Function<Integer, String[]> fun1 = (args) -> new String[args];
			Function<Integer, String[]> fun2 = String[]::new;

			
4)Stream API

概念:Stream用于操作集合、數(shù)組等元素序列。

Stream API 的操作步驟

	1)創(chuàng)建Stream
	
		創(chuàng)建Stream的方式:
			1>通過Collection中的 stream() 或 parallelStream() 來創(chuàng)建一個(gè)Stream
				eg:
					List<String> list = new ArrayList<>();
					Stream<String> stream = list.stream(); 					//獲取一個(gè)順序流
					Stream<String> parallelStream = list.parallelStream(); 	//獲取一個(gè)并行流
				
			2>通過Arrays中的stream(T[] array)創(chuàng)建一個(gè)Stream
			3>通過Stream中的
				of(T... values)									創(chuàng)建一個(gè)Stream
				generate(Supplier<T> s)							創(chuàng)建一個(gè)無限Stream
				iterate(final T seed, final UnaryOperator<T> f)	創(chuàng)建一個(gè)無限Stream
				

	2)Stream的中間操作
	
		Stream<T> filter(Predicate<? super T> predicate)	從流中排除某些元素
		Stream<T> limit(long n);							將流截?cái)?,只保留流中的前n個(gè)元素
		Stream<T> skip(long n);								將流中的前n個(gè)元素剔除掉
		Stream<T> distinct();								將流中的元素進(jìn)行去重操作。根據(jù)元素的hashCode()方法和equals()方法來確定唯一性。
		
		Stream<T> sorted();									將流中的元素進(jìn)行自然排序
		Stream<T> sorted(Comparator<? super T> comparator); 將流中的元素按照指定的規(guī)則排序
		
		<R> Stream<R> map(Function<? super T, ? extends R> mapper);		
		
			1>說明:將流中的元素進(jìn)行處理后,用新生成的元素代替原來的元素。注:新元素的類型與舊元素的類型可能不一樣。
			2>參數(shù):一個(gè)函數(shù)式接口,用傳入的函數(shù)來生成新的元素。
			3>舉例:Stream<String> stream = strList.stream().map(String::toUpperCase);
		
		<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
		
			說明:將流中的每個(gè)值都換成另一個(gè)流,然后把所有流連接成一個(gè)流。
		
		
		<R, A> R collect(Collector<? super T, A, R> collector);	
		
			1>說明:將流轉(zhuǎn)換為其它形式,將流中的元素進(jìn)行分組、拼接等。
			2>舉例:List<String> list = strList.stream().map(String::toUpperCase).collect(Collectors.toList());
	

	3)Stream的終端操作
	
		void forEach(Consumer<? super T> action);	遍歷流中的所有元素
		
		boolean allMatch(Predicate<? super T> predicate);	檢查所有的元素是否都匹配
				anyMatch									檢查是否有元素匹配
				noneMatch									檢查是否有元素不匹配
		
		Optional<T> findFirst();							返回第一個(gè)元素
		Optional<T> findAny();								返回流中任意一個(gè)元素
		
		long count();										返回流中元素的總數(shù)
		Optional<T> max(Comparator<? super T> comparator);	返回流中最大的元素
		Optional<T> min(Comparator<? super T> comparator);	返回流中最小的元素
	
	
	說明:
		1>只有調(diào)用終端操作后,所有的中間操作才會(huì)去執(zhí)行,若沒有調(diào)用終端操作,那么所有的中間操作都將不會(huì)執(zhí)行,這種模式叫做"惰性求值"。
		2>流只能使用一次,即只能調(diào)用一次終端操作。

到此,關(guān)于“java8的新特性怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

當(dāng)前文章:java8的新特性怎么使用
文章分享:http://bm7419.com/article14/igsode.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司網(wǎng)頁(yè)設(shè)計(jì)公司、全網(wǎng)營(yíng)銷推廣、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站導(dǎo)航、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站