中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java8的新特性怎么使用

發布時間:2021-12-18 15:23:03 來源:億速云 閱讀:139 作者:iii 欄目:云計算

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

1)Lambda表達式

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

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

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

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

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

		格式六:Lambda 表達式的參數列表的數據類型可以省略不寫,因為JVM編譯器通過上下文推斷出,數據類型,即“類型推斷”
				(Integer x, Integer y) -> Integer.compare(x, y);			
				
				

2)函數式接口

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

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

			
4)Stream API

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

Stream API 的操作步驟

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

	2)Stream的中間操作
	
		Stream<T> filter(Predicate<? super T> predicate)	從流中排除某些元素
		Stream<T> limit(long n);							將流截斷,只保留流中的前n個元素
		Stream<T> skip(long n);								將流中的前n個元素剔除掉
		Stream<T> distinct();								將流中的元素進行去重操作。根據元素的hashCode()方法和equals()方法來確定唯一性。
		
		Stream<T> sorted();									將流中的元素進行自然排序
		Stream<T> sorted(Comparator<? super T> comparator); 將流中的元素按照指定的規則排序
		
		<R> Stream<R> map(Function<? super T, ? extends R> mapper);		
		
			1>說明:將流中的元素進行處理后,用新生成的元素代替原來的元素。注:新元素的類型與舊元素的類型可能不一樣。
			2>參數:一個函數式接口,用傳入的函數來生成新的元素。
			3>舉例:Stream<String> stream = strList.stream().map(String::toUpperCase);
		
		<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
		
			說明:將流中的每個值都換成另一個流,然后把所有流連接成一個流。
		
		
		<R, A> R collect(Collector<? super T, A, R> collector);	
		
			1>說明:將流轉換為其它形式,將流中的元素進行分組、拼接等。
			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();							返回第一個元素
		Optional<T> findAny();								返回流中任意一個元素
		
		long count();										返回流中元素的總數
		Optional<T> max(Comparator<? super T> comparator);	返回流中最大的元素
		Optional<T> min(Comparator<? super T> comparator);	返回流中最小的元素
	
	
	說明:
		1>只有調用終端操作后,所有的中間操作才會去執行,若沒有調用終端操作,那么所有的中間操作都將不會執行,這種模式叫做"惰性求值"。
		2>流只能使用一次,即只能調用一次終端操作。

到此,關于“java8的新特性怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灌南县| 开鲁县| 奉贤区| 枣强县| 三台县| 嘉祥县| 临泉县| 长阳| 肇源县| 酒泉市| 东兴市| 增城市| 开阳县| 阳江市| 攀枝花市| 九寨沟县| 固原市| 定边县| 吉木萨尔县| 吕梁市| 库伦旗| 乌兰县| 岐山县| 十堰市| 句容市| 农安县| 子长县| 垦利县| 台东县| 拜城县| 那坡县| 长岭县| 固安县| 广水市| 白沙| 洞头县| 特克斯县| 德格县| 兴隆县| 益阳市| 沾益县|