摘要:的參數(shù)和返回值需求使用數(shù)組存儲多個對象對數(shù)組中的對象使用的方法通過年齡進行升序排序下面舉例演示接口的使用場景代碼,其中的抽象方法定義為當需要對一個對象數(shù)組進行排序時,方法需要一個接口實例來指定排序的規(guī)則。
3.8 Lambda的參數(shù)和返回值
需求: 使用數(shù)組存儲多個Person對象 對數(shù)組中的Person對象使用Arrays的sort方法通過年齡進行升序排序
下面舉例演示java.util.Comparator
public abstract int compare(T o1, T o2);
當需要對一個對象數(shù)組進行排序時,Arrays.sort方法需要一個Comparator接口實例來指定排序的規(guī)則。假設有一個Person類,含有String name和int age兩個成員變量:
public class Person { private String name; private int age; // 省略構造器、toString方法與Getter Setter }傳統(tǒng)寫法
如果使用傳統(tǒng)的代碼對Person[]數(shù)組進行排序,寫法如下:
import java.util.Arrays; import java.util.Comparator; public class Demo06Comparator { public static void main(String[] args) { // 本來年齡亂序的對象數(shù)組 Person[] array = { new Person("古力娜扎", 19), new Person("迪麗熱巴", 18), new Person("馬爾扎哈", 20) }; // 匿名內部類 Comparatorcomp = new Comparator () { @Override public int compare(Person o1, Person o2) { return o1.getAge() - o2.getAge(); } }; Arrays.sort(array, comp); // 第二個參數(shù)為排序規(guī)則,即Comparator接口實例 for (Person person : array) { System.out.println(person); } } }
這種做法在面向對象的思想中,似乎也是“理所當然”的。其中Comparator接口的實例(使用了匿名內部類)代表了“按照年齡從小到大”的排序規(guī)則。
代碼分析下面我們來搞清楚上述代碼真正要做什么事情。
為了排序,Arrays.sort方法需要排序規(guī)則,即Comparator接口的實例,抽象方法compare是關鍵;
為了指定compare的方法體,不得不需要Comparator接口的實現(xiàn)類;
為了省去定義一個ComparatorImpl實現(xiàn)類的麻煩,不得不使用匿名內部類;
必須覆蓋重寫抽象compare方法,所以方法名稱、方法參數(shù)、方法返回值不得不再寫一遍,且不能寫錯;
實際上,只有參數(shù)和方法體才是關鍵。
Lambda寫法import java.util.Arrays; public class Demo07ComparatorLambda { public static void main(String[] args) { Person[] array = { new Person("古力娜扎", 19), new Person("迪麗熱巴", 18), new Person("馬爾扎哈", 20) }; Arrays.sort(array, (Person a, Person b) -> { return a.getAge() - b.getAge(); }); for (Person person : array) { System.out.println(person); } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/75993.html
摘要:使用表達式,使得應用變得簡潔而緊湊。很多語言等從設計之初就支持表達式。表達式的參數(shù)與函數(shù)式接口內方法的參數(shù),返回值類型相互對應。更多教程和資料請上騰訊課堂樂字節(jié) showImg(https://segmentfault.com/img/bVbtotg?w=935&h=345); Java8 引入Lambda表達式,允許開發(fā)者將函數(shù)當成參數(shù)傳遞給某個方法,或者把代碼本身當作數(shù)據進行處理。...
摘要:本文是函數(shù)式編程第二章的讀書筆記。的語法簡化了使用匿名內部類時的模板代碼,讓程序員專注于編寫想要執(zhí)行的行為,也讓代碼更加簡潔易讀。中最重要的函數(shù)接口類型推斷為新成員表達式提供了類型推斷的支持,在不需要聲明參數(shù)類型的表達式中表現(xiàn)的有為明顯。 本文是「Java 8 函數(shù)式編程」第二章的讀書筆記。 Lambda引入的變化 Lambda表達式,是一種緊湊的、傳遞行為的方式,從編程思想上來講,...
摘要:很多語言等從設計之初就支持表達式。注意此時外部局部變量將自動變?yōu)樽鳛榉椒ǚ祷刂道臃祷嘏袛嘧址欠駷榭张袛嘧址欠駷榭战裉礻P于新特性表達式就講到這里了,接下來我會繼續(xù)講述新特性之函數(shù)式接口。 上一篇文章我們了解了Java8新特性-接口默認方法,接下來我們聊一聊Java8新特性之Lambda表達式。 Lambda表達式(也稱為閉包),它允許我們將函數(shù)當成參數(shù)傳遞給某個方法,或者把代碼...
摘要:表達式有參數(shù)有返回值的練習需求給定一個計算器接口,內含抽象方法可以將兩個數(shù)字相加得到和值使用的標準格式調用方法,完成和的相加計算調用方法方法的參數(shù)是一個接口可以使用匿名內部類使用表達式簡化匿名內部類的書寫優(yōu)化省略定義一個方法參數(shù)傳遞兩個 package com.itheima.demo06.Lambda; /* Lambda表達式有參數(shù)有返回值的練習 需求: 給定一個計算器Ca...
摘要:上下文比如接受它傳遞的方法的參數(shù),或接受它的值的局部變量中表達式需要的類型稱為目標類型。但局部變量必須顯式聲明為,或事實上是。換句話說,表達式只能捕獲指派給它們的局部變量一次。注捕獲實例變量可以被看作捕獲最終局部變量。 簡介 概念 Lambda 表達式可以理解為簡潔地表示可傳遞的匿名函數(shù)的一種方式:它沒有名稱,但它有參數(shù)列表、函數(shù)主體、返回類型,可能還有一個可以拋出的異常列表。 匿名...
摘要:語言是強類型面向對象的語言,所以必須提供一種數(shù)據類型作為表達式的返回值類型符合中函數(shù)格式的定義符合面向對象規(guī)則,所以最終表達式要有一個映射成對象的過程。定一個函數(shù)式接口我們在接口里定義了一個沒有參數(shù)返回值的抽象方法。 在JAVA中,Lambda 表達式(Lambda expression)是一個抽象方法的實現(xiàn)。這個抽象方法必須是在接口中聲明的,而且實現(xiàn)類只需要實現(xiàn)這一個抽象方法,我們稱...
閱讀 1339·2019-08-30 15:44
閱讀 1391·2019-08-29 18:42
閱讀 446·2019-08-29 13:59
閱讀 782·2019-08-28 17:58
閱讀 2823·2019-08-26 12:02
閱讀 2424·2019-08-23 18:40
閱讀 2414·2019-08-23 18:13
閱讀 3116·2019-08-23 16:27