Java8之Lambda表示式

2021-07-25 00:05:44 字數 2900 閱讀 2122

intstream.range(1000,10000).filter(v->

v / 1000 * v / 1000 * v / 1000 + v / 100 * v / 100 * v / 100 + v / 10 * v / 10 * v / 10 == v

).foreach(system.out::println);

上面的表示式中多處用到lamnda表示式以及stream api,那麼什麼是lambda表示式?

(int x,int y)-> ;

(int x,int y)->;

省略引數型別:編譯器會根據使用的環境推斷出其引數型別.

當只有乙個引數時,不僅能省略引數型別,連小括號也能省略

沒有引數時,小括號不能省略

帶修飾符的引數型別不能省略

lamda表示式的實現體:

public

class lambda2 ;

addable q = (a, b) -> a + b;

outputable out = () -> ;

outputable out3 = () ->

system.out.println();

;//方法引用

outputable out2 = system.out::println;

//有修飾符修飾時,引數型別不能省略

finable fin = (final int x, int y) -> x / y;

}private

static

inte***ce addable

private

static

inte***ce outputable

private

static

inte***ce finable

}

public

static

void

main(string args)

private

static

inte***ce addable

private

static

inte***ce outputable

public

static

void

main(string args)

private

static

inte***ce addable

inte***ce outputable 

static

void output(lambda4.addable2 add)

}public

class lambda4

@functionalinte***ce

inte***ce addable2

default

int divide()

}

@functionalinte***ce

inte***ce

dividable }

@functionalinte***ce

inte***ce

dividable2

函式式介面

引數型別

返回型別

抽象方法

描述其他方法

runnable

無void

run作為無引數和無返回值的動作執行

supper無t

get提供乙個t型別值

consumert無

accept

處理乙個t型別引數

andthen

predicate

tboolean

test

布林函式

and,or,negate,isequal

functiontr

有乙個t型別引數的函式

compose,andthen,identity

public

static

void

main(string args)

inte***ce addable

inte***ce multable

方法引用的型別:

表示式說明typename::staticmethod

引用類,介面,列舉中的靜態方法

objectref::instancemethod

特定物件的例項方法

classname::instancemethod

類的任意物件的例項方法

typename.super::instancemthod

特定物件的超類的例項方法

arraytypename::new

陣列的構造方法

inte***ce convert

@requiresapi(api = build.version_codes.n)

public

static

void

main(string args)

public

static

void

main(string args)

if (count == 3) }};

c.accept(new

int);

for (int i = 0; i < 10; i++) };}

}

java8新特性之lambda表示式

lambda表示式需要支援函式式介面 介面中只有乙個抽象方法的介面 可以用 functionalinte ce註解修飾介面,這樣如果定義超過乙個抽象方法就會報錯 幾種格式 格式一 無引數,無返回值 system.out.println hello 格式二 有乙個引數,無返回值 x system.ou...

Java8新特性 Lambda表示式

lambda表示式的本質只是乙個語法糖,由編譯器推斷並幫你轉換包裝為常規的 因此你可以使用更少的 來實現同樣的功能。基本語法 parameters expression parameters 簡單例子 僅用三行 完成 排序後輸出列表 public static void main string ar...

java8新特性 Lambda表示式

private static void comparecreatethread t1 start 建立乙個執行緒 lambda表示式 new thread system.out.printf 執行緒 s 正在執行 n thread.currentthread getname t2 start 執行結...