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