好程式設計師大資料學習路線之大資料自學路線二

好程式設計師IT發表於2019-09-18

好程式設計師大資料學習路線之大資料自學路線二

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 的父類

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2657352/,如需轉載,請註明出處,否則將追究法律責任。

相關文章