您好,登錄后才能下訂單哦!
好程序員大數據學習路線之大數據自學路線二
lambda表達式
比較lambda表達式和匿名內部類:
lambda表達式就是簡單的匿名內部類
匿名內部類可以為任意接口創建實例,不管接口有多少抽象方法;
lambda表達式只能為函數式接口創建實例(即只能有一個抽象方法)
?
基本語法:
?
(參數)->表達式、(參數)->{方法體;}
?
1.形參:形參列表允許省略形參類型,若形參列表中只有一個參數,形參列表的圓括號也可以省略代碼
?
2.箭頭:通過英文的劃線號和大于符號組成
?
3.代碼塊:如果代碼塊只包含一條語句,lambda表達式允許省略代碼塊的花括號
?
4.返回值:lambda代碼塊只有一條return語句,甚至可以省略return關鍵字
?
lambda表達式需要返回值,而它的代碼塊中僅有一條省略了return的語句,lambda表達式會自動返回這條語句的結果
?
5.lambda表達式中變量的使用:如果是全局的變量直接用,如果是局部變量會默認在前面添加final
?
```java
//匿名內部類
InterfaceA a = new InterfaceA() {
????public void show() {
????????System.out.println("匿名內部類的show");
????}
};
a.show();
//通過lambda表達式
InterfaceA b = ()->{
????System.out.println("lambda表達式的show");
};
b.show();
//簡化
InterfaceA b1 = ()->System.out.println("簡化的lambda表達式的show");
b1.show();
```
?
方法引用與構造器引用
1.引用類方法
2.引用特定對象的實例方法
3.引用某類對象的實例方法
4.引用構造方法
?
```java
//1.沒有參數的
InterA aa = ()->System.out.println("沒有參數");
//2.一個參數的
InterB bb = (ib)->System.out.println("一個參數:"+ib);
//3.兩個參數的
InterC cc = (ia,ib)->System.out.println("兩個參數:"+"ia:"+ia+"ib:"+ib);
//4.返回值
InterD dd = (i,j)->i+j;
int value1 = dd.showD(4, 7);
//5.lambda表達式作為參數
```
?
```java
public class Demo3 {
public static void main(String[] args) {
//
//
//
//
}
}
//* 1.引用類方法
interface Converter{
//將字符串轉換成整數
Integer convert(String value);
}
class Test1{
public static void fun1() {
}
}
//* 2.引用特定對象的實例方法
interface IA{
public void show(String message);
}
class A{
public void play(String i) {
}
}
class Test2{
public static void fun2() {
}
}
//* 3.引用某類對象的實例方法
interface IB{
String subString(String string,int stat,int end);
}
class Test3{
public static void fun3() {
}
}
//* 4.引用構造方法
interface IC{
Object show(String name,int age);
}
class Person{
String name;
int age;
public Person(String name, int age) {
}
@Override
public String toString() {
}
}
class Test4{
public static void fun4() {
}
}
```
集合
可以存儲不同類型的多個數據,只能存儲引用數據類型,動態分配內存
Collection:接口
添加:boolean add(Object o);、boolean addAll(Collection<?> c);
刪除:boolean remove(Object o);、boolean removeAll(Collection<?> c);、
判斷:boolean contains(Object o);、boolean contains(Collection<?> c);
獲取:Iterator<E> iterator();
集合變數組:Object toArray();
?
List:接口:
有序的(存儲有序),可重復的
?
底層數據結構是數組,線程不安全,特點:查找速度快,添加刪除慢
底層數據結構是數組,線程安全,特點:查找速度快,添加刪除慢
底層數據結構是鏈表,線程不安全,特點:查找速度慢,添加刪除快
?
Set:接口:
?
無序的,不可重復的
底層是哈希表,線程不安全
底層是二叉樹,線程不安全
Map:接口
HashMap:DAY07筆記2019-07-30
TreeMap:DAY07筆記2019-07-30
?
泛型
通過<數據類型>接受一種數據類型
1.減少容錯處理,簡化代碼
2.將運行錯誤提前到編譯階段
泛型應用在方法上:
1.類上的泛型與方法上的泛型保持一致
```java
class Dog<F>{
public void eat(F f) {
}
}
```
2.方法上獨立使用泛型
```java
public <E> void song(E e) {
}
```
?
3.靜態方法上使用泛型(必須獨立使用):
```java
public static <W> void show(W w) {}
```
泛型應用在接口上:
?
1.子類上的泛型與接口上的一致
?
```java
interface Inte<E>{
public void show(E e);
}
class Pig<E> implements Inte<E>{
@Override
public void show(E e) {
?
}
}
```
2.接口上使用泛型,子類上不用泛型
?
```java
interface Inte<E>{
public void show(E e);
}
class Bird implements Inte<String>{
public void show(String e) {};
}
```
1.如果是重寫的方法,泛型與接口一致
2.如果是子類自己的方法,可以與接口一致,也可以有自己的泛型
?
限制上限和限制下限
限制上限<? extends E>:E以及E的子類
限制上限<? super E>:E以及E的父類
?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。