一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺析Java8新特性Lambda表達式和函數式接口

淺析Java8新特性Lambda表達式和函數式接口

2020-12-09 14:07我不是李大俠 Java教程

Lambda表達式理解為是 一段可以傳遞的代碼。最直觀的是使用Lambda表達式之后不用再寫大量的匿名內部類,簡化代碼,提高了代碼的可讀性

什么是Lambda表達式,java8為什么使用Lambda表達式?

“Lambda 表達式”(lambda expression)是一個匿名函數,Lambda表達式基于數學中的λ演算得名,直接對應于其中的lambda抽象(lambda abstraction),是一個匿名函數,即沒有函數名的函數。我們可以把 Lambda表達式理解為是 一段可以傳遞的代碼。最直觀的是使用Lambda表達式之后不用再寫大量的匿名內部類,簡化代碼,提高了代碼的可讀性。

?
1
2
3
4
5
6
7
8
9
// 啟動一個線程,不使用Lambda表達式
new Thread(new Runnable() {
  @Override
  public void run() {
    System.out.println("啟動一個線程");
  }
}).start();
//使用Lambda表達式,只需要一行代碼
new Thread(() -> System.out.println("啟動一個線程")).start();

Lambda表達式的基本語法和格式

基本語法

  • java8中引入了新的操作符”->”,稱為箭頭操作符或者lambda操作符,箭頭操作符將lambda拆分為兩部分,左側:lambda表達式的參數列表,右側:lambda表達式中的所需要執行的的功能(接口實現的功能代碼)。
  • lambda表達式需要“函數式接口”的支持,接口中只有一個抽象方法的接口稱為函數式接口,可以使用注解@FunctionalInterface檢查接口是否是函數式接口。
  • lambda表達式的參數列表的數據類型可以省略不寫,因為jvm編輯器可以通過上下文判斷。
  • 基本格式

① 無參數,無返回值。( ) -> System.out.println(“hello”)

?
1
2
// 實現Runnable接口(無參,無返回)
Runnable r = () -> System.out.println("hello lambda");

② 一個參數(小括號可以省略不寫,習慣上加上小括號),無返回值。(x) -> System.out.println(x)

?
1
2
3
4
5
6
7
//Consumer接口(一個參數,無返回值),之后會提到
//第一種,小括號不省略
Consumer<String> c = (x) -> System.out.print(x);
c.accept("hello");
//小括號省略
Consumer<String> c1 = x -> System.out.print(x);
c1.accept("hello")

③ 有多個參數,并且lambda有多條語句,則lambda語句必須用大括號括起來并有return返回(若有一條語句則可以省略大括號和return),有返回值。(x,y) ->{System.out.println(“hello”);return Integer.compare(x, y);};

?
1
2
3
4
5
6
7
8
9
//Comparator接口
  //多條語句
  Comparator<Integer> comparator = (x,y) ->{
    System.out.println("hello");
    return Integer.compare(x, y);
  };
  //一條語句
  Comparator<Integer> comparator2 = (x,y) -> Integer.compare(x, y);
  System.out.println(comparator2.compare(23, 22));

還有其他的一些格式都是大同小異,這里就不再了解。

函數式接口是什么?

在前面也提到了函數接口,那么函數接口到底是什么呢?是個接口,只包含一個抽象方法,那么它就是函數式接口,我們可以在任意函數式接口上使用 @FunctionalInterface 檢查它是否是一個函數式接口。
函數式接口里是可以包含默認方法、靜態方法,他們不是抽象方法;也可以包含Java.lang.Object里的public方法,因為任何一個類都繼承Object類,包含了來自java.lang.Object里對這些抽象方法的實現,也不屬于抽象方法;函數式接口里允許子接口繼承多個父接口,但每個父接口中都只能存在一個抽象方法,且必須的相同的抽象方法。

Java8內置函數式接口

四大核心函數式接口

 

函數式接口 方法 參數類型 返回類型 作用
Consumer<T> 消費型接口 void accept(T t) T void 對T類型的參數進行操作
Supplier<T> 供給型接口 T get() T 操作數據,返回T類型的結果
Function<T, R> 函數型接口 R apply(T t) T R 對T類型參數進行操作,并返回R類型的結果
Predicate<T> 斷定型接口 boolean test(T t) T boolean 確定T類型參數是否滿足某約束,并返回boolean值

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Consumer<T> 消費型接口
  @Test
  public void test1(){
    Consumer<String> c = (x) -> System.out.println("hello:"+x+"!");
    c.accept("Java");
  }
  // Supplier<T> 供給型接口
  @Test
  public void test2(){
    Supplier<String> s = () -> "hello,beautiful girl";
    String str = s.get();
    System.out.println(str);
  }
  //Function<T,R> 函數性接口
  @Test
  public void test3(){
    Function<String, Integer> f= (x) -> x.length();
    Integer len = f.apply("hello");
    System.out.println(len);
  }
  //Predicate<T> 斷言型接口
  @Test
  public void test4(){
    Predicate<String> p = (x) -> x.length()>5;
    boolean b = p.test("hello Java");
    System.out.println(b);
  }

其它函數式接口

 

函數式接口 方法 參數類型 返回類型 作用
BiFunction<T , U, R > R apply(T t, U u) T, U R 對 T, U 類型的參數進行操作,并返回R類型的結果
UnaryOperator<T> (Function 子接口) T apply(T t) T T 對 T類型的參數進行一元運算,并返回R對象的結果
BinaryOperato<T,R> (BiFunction 子接口) ) T apply(T t1, T t2 T, T T 對T類型的參數進行二元運算,并返回T類型的結果
BiConsumer<T, U> void accept(T t, U u) T, U void 對T,作
ToIntToIntFunction<T> ToLongFunction<T> ToDoubleFunction<T&gt int(long,double) applyAsInt(T value) T int, long, double 計 算 int 、 long 、double值的函數
IntFunction<R> LongFunction<R> DoubleFunction<R> R apply(int(long,double) value) int, long, double R 參數分別為int、long、double 類型的函數

 

總結

以上所述是小編給大家介紹的Java8新特性Lambda表達式和函數式接口,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/l18637220680/article/details/76544280?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男生和女生艹逼 | 狠狠综合网 | 久久99精品涩AV毛片观看 | 亚洲国产成人99精品激情在线 | t66y地址一地址二地址三 | 免费网站看v片在线成人国产系列 | 色播艾小青国产专区在线播放 | 好湿好紧太硬了我太爽了网站 | 成人另类视频 | 亚洲高清视频网站 | 欧美一级在线视频 | 91久久偷偷做嫩草影院免费 | 大团圆免费阅读全文 | 成人精品福利 | 香蕉97超级碰碰碰免费公 | 性刺激欧美三级在线现看中文 | 欧美一区二区三区免费观看视频 | 国产成人精品一区二三区2022 | 国产 日韩 欧美视频二区 | 肉蒲在线观看 | 婚前试爱全集免费观看 | 亚洲黄色三级视频 | 午夜DY888国产精品影院 | 成人免费视频一区二区三区 | 国产清纯白嫩大学生正在播放 | 91大神在线精品视频一区 | 国产精品日本亚洲777 | 亚州综合网 | 国产在线观看福利片 | 亚洲精品91在线 | 欧洲第一页 | 精品亚洲综合久久中文字幕 | 京东热dj6666 | 波多野结衣伦理在线观看 | 99在线视频精品 | 欧美一级xxx | 成人精品亚洲人成在线 | 亚洲欧美日韩国产一区二区精品 | 亚洲另类第一页 | 成人影院在线观看免费 | 日本大乳护士的引诱图片 |