最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java8中l(wèi)amba表達(dá)式的使用

 更新時(shí)間:2017年02月22日 16:50:57   作者:遁地龍卷風(fēng)  
這篇文章主要介紹了java8中l(wèi)amba表達(dá)式的使用,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

(-1)前言

  學(xué)習(xí)lamba表達(dá)式是十分重要的,你會(huì)發(fā)現(xiàn)java變的可愛多了。

(0)函數(shù)式接口

  只有一個(gè)方法的接口稱為函數(shù)式接口

JButton jButton = new JButton("123");
  jButton.addActionListener(new ActionListener() {
  @Override
  public void actionPerformed(ActionEvent e) {}});

等同于

jButton.addActionListener(e->System.out.println("Hello world"));
  jButton.addActionListener((e)->System.out.println("Hello world"));
  jButton.addActionListener((ActionEvent e)->System.out.println("Hello world"));
  jButton.addActionListener((ActionEvent e)->{System.out.println("Hello world");return;});

a.規(guī)則

  A->B

  A 部分是傳入方法的參數(shù)

  B 部分是函數(shù)體

  參數(shù)類型以及返回類型如果可以通過上下文推斷出來可不寫

   當(dāng)參數(shù)只有一個(gè)而且它的類型可以被推導(dǎo)得知時(shí),該參數(shù)列表外面的括號(hào)可以被省略

   當(dāng)函數(shù)體只有一個(gè)語句且返回類型可被推導(dǎo)時(shí){}可省略

b.例子

Runnable runnable = ()->System.out.println(sign);
  Runnable runnable2 = new Runnable() {
  @Override
  public void run() {
  // TODO Auto-generated method stub}
  };
  通過匿名內(nèi)部類我們知道run方法是不需要參數(shù)的
  System.out.println(sign) 相當(dāng)于run方法的方法體
  Comparator<Integer> lol = (x,y)->x-y;
  Comparator<Integer> lol = (x,y)->{System.out.println(x+y);return x-y;};
  new Comparator<Integer>() {
  @Override
  public int compare(Integer o1, Integer o2) {
  // TODO Auto-generated method stub
  return 0;
  }
};

通過匿名內(nèi)部類我們知道compare方法需要兩個(gè)參數(shù)

這時(shí)編譯通過Comparator<Integer>中Integer推導(dǎo)出參宿類型及返回類型

c.深入

  lamba表達(dá)式可被看做函數(shù),java.util.function定義了常用的函數(shù)式接口

  http://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

  BiFunction<T,U,R>

  T 代表第一個(gè)參數(shù)

  U 代表第二個(gè)參數(shù)

  R 代表返回值

  這表時(shí)T,U,R都需要編譯器根據(jù)上下文進(jìn)行類型推導(dǎo)

  Consumer<T>  代表e->System.out.println("Hello world")

  所以當(dāng)一個(gè)方法需要的是lamba表達(dá)式時(shí),參數(shù)展現(xiàn)形式是java.util.function中定義的樣式

(2)方法引用

  方法引用是對(duì)Lamba表達(dá)式的簡(jiǎn)化

  類名::方法名(對(duì)象方法、類方法)

int[] oop = {3,1,2,1};
  static void sayHello(Integer name)
  {
  System.out.println(123);
  }
  Arrays.stream(oop).forEach(Test::sayHello);
  Arrays.stream(oop).forEach(s->Test.sayHello(s));

  構(gòu)造方法引用:Class::new

  數(shù)組構(gòu)造方法引用:TypeName[]::new

(3)強(qiáng)制類型轉(zhuǎn)換

  有時(shí)候編譯器通過上下文推導(dǎo)出的返回類型與實(shí)際類型不符時(shí)需要進(jìn)類型轉(zhuǎn)換

Stream<Object> strings = shapelist.stream().<Object>map(s->s.getColor());
  s.getColor())

  s.getColor()返回的是String

(4)lamba表達(dá)式在java對(duì)象中的應(yīng)用

你應(yīng)該在任何java對(duì)象中嘗試應(yīng)用lamba表達(dá)式,通則是將這個(gè)對(duì)象轉(zhuǎn)換成java.util.stream,流有串行并行之分哦!并行流關(guān)鍵字parallelStream

數(shù)組   Arrays.stream()

List、Set   .stream()  

String  String.chars

...

java.util.stream提供了許多方法用來操作流中的數(shù)據(jù),去試一試吧

http://docs.oracle.com/javase/8/docs/api/

java 8英文API,沒有找到中文的...

(2)對(duì)流整體的操作

比如我們可以求一個(gè)流的的總和

int sum = Arrays.stream(oop).sum();
int sum1 = Arrays.stream(oop).reduce(0,(x,y)->x+y);

(3)集合之間的轉(zhuǎn)換

  我們可以將ArrayList<Shape> 轉(zhuǎn)換成ArrayList<String>、Set<String>、HashMap<String,String>,HashMap<String,Shape>甚至是更復(fù)雜的

a.map()

  該方法是映射的意思(一開始我聯(lián)想到了HashMap),還有mapToDouble等

b.collect()

  collect()接受Collectors類型的參數(shù),用來將流重新匯合,

  Collectors是收集器,Collectors.toList(),Collectors.toMap()、Collectors.groupingBy等

c.例子  

public class Shape
  {
  private String color;
  public Shape() {
  // TODO Auto-generated constructor stub
  }
  public String getColor() {
  return color;
  }
  public void setColor(String color) {
  this.color = color;
  }
  public Shape(String color)
  {
  this.color = color;
  }
  }
  ArrayList<String> colorList = new ArrayList<String>(){
  {
  add("Red");
  add("Blue");
  add("Yellow");
  }
  };
  List<Shape> shapeList = colorList.stream().map(Shape::new).collect(Collectors.toList());
  List<String> colos = shpaeList.stream().map(s->s.getColor()).collect(Collectors.toList());
  Set<String> colosSet = shpaeList.stream().map(s->s.getColor()).collect(Collectors.toSet());
  Map<String, String> colorMap = colorList.stream().collect(Collectors.toMap(a->a,s->s));
  Map<String,Shape> shapesMap = shpaeList.stream().collect(Collectors.toMap(s->s.getColor(), s->s));

  Eclipse點(diǎn)不出getColor()方法,還以為用法不對(duì)...

  

Map<String,Set<Shape>> shapeMapSet = shpaeList.stream().collect(Collectors.groupingBy(s->s.getColor(),Collectors.toSet()));
  Map<String,Map<String, List<Shape>>> shapeMap3 = shpaeList.stream().collect(Collectors.groupingBy(s->s.getColor(),Collectors.groupingBy(s->s.getColor(),Collectors.toList())));

(4)集合本身的操縱

  想要改變現(xiàn)有集合而不產(chǎn)生新的集合可以使用

 Iterable.forEach(Consumer),Collection.removeAll(Predicate),List.replaceAll(UnaryOperator),List.sort(Comparator)和Map.computeIfAbsent()等
  shpaeList.sort(Comparator.comparing(Shape::getColor));

以上所述是小編給大家介紹的java8中l(wèi)amba表達(dá)式的使用,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java并發(fā)編程示例(十):線程組

    Java并發(fā)編程示例(十):線程組

    這篇文章主要介紹了Java并發(fā)編程示例(十):線程組,Java提供了ThreadGroup類來控制一個(gè)線程組,一個(gè)線程組可以通過線程對(duì)象來創(chuàng)建,也可以由其他線程組來創(chuàng)建,生成一個(gè)樹形結(jié)構(gòu)的線程,需要的朋友可以參考下
    2014-12-12
  • 使用proguard對(duì)maven構(gòu)建的springboot項(xiàng)目進(jìn)行混淆方式

    使用proguard對(duì)maven構(gòu)建的springboot項(xiàng)目進(jìn)行混淆方式

    文章介紹了如何使用ProGuard對(duì)Maven構(gòu)建的Spring Boot項(xiàng)目進(jìn)行混淆,并解決混淆后可能遇到的版本兼容性問題和類名沖突問題,主要步驟包括下載高版本的ProGuard、配置POM文件、添加ProGuard配置文件、修改Spring Boot啟動(dòng)文件以避免類名沖突
    2024-11-11
  • Java并發(fā)工具類Future使用示例

    Java并發(fā)工具類Future使用示例

    這篇文章主要介紹了Java并發(fā)工具類Future使用示例,本文需要注意future.get()方法是阻塞式的,如果調(diào)用該方法的時(shí)候任務(wù)尚未執(zhí)行完成,則會(huì)一直等待下去,直到任務(wù)執(zhí)行結(jié)束,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-06-06
  • 解答為什么 Java 線程沒有Running狀態(tài)

    解答為什么 Java 線程沒有Running狀態(tài)

    Java 線程沒有Running狀態(tài)指的是一個(gè)在 JVM 中執(zhí)行 的線程處于的狀態(tài),本文小編將為大家詳解一二,需要的朋友可以參考下面文章具體內(nèi)容
    2021-09-09
  • java常見的字符串拼接方式總結(jié)

    java常見的字符串拼接方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了java中常見的字符串拼接方式,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • spring security自定義認(rèn)證登錄的全過程記錄

    spring security自定義認(rèn)證登錄的全過程記錄

    這篇文章主要給大家介紹了關(guān)于spring security自定義認(rèn)證登錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • RocketMQ消息丟失的場(chǎng)景以及解決方案

    RocketMQ消息丟失的場(chǎng)景以及解決方案

    Apache RocketMQ是企業(yè)級(jí)的消息中間件,以其高性能和高可靠性而廣泛應(yīng)用,但是,消息丟失的問題在實(shí)踐中仍然存在,本文將探討此問題并提供解決方案,需要的朋友可以參考下
    2023-11-11
  • IDEA中Services欄不顯示的解決方案小結(jié)

    IDEA中Services欄不顯示的解決方案小結(jié)

    正常編譯完一個(gè)SpringBoot或者SringCloud項(xiàng)目之后,Services都會(huì)顯示出你有哪些服務(wù),如果沒有services欄怎么解決呢?下面小編給大家分享IDEA中Services欄不顯示的解決方案小結(jié),感興趣的朋友一起看看吧
    2021-08-08
  • spring boot如何使用spring AOP實(shí)現(xiàn)攔截器

    spring boot如何使用spring AOP實(shí)現(xiàn)攔截器

    本篇文章主要介紹了spring boot如何使用spring AOP實(shí)現(xiàn)攔截器,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線程池代碼示例

    Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線程池代碼示例

    線程池是管理線程的一個(gè)池子,通過阻塞隊(duì)列管理任務(wù),主要參數(shù)包括corePoolSize、maximumPoolSize、keepAliveTime等,這篇文章主要介紹了Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線程池的相關(guān)資料,需要的朋友可以參考下
    2024-09-09

最新評(píng)論

京山县| 江源县| 镇雄县| 布尔津县| 云林县| 平泉县| 沂水县| 芦山县| 东乌珠穆沁旗| 利津县| 南丹县| 四子王旗| 宁都县| 白山市| 石林| 乌审旗| 新和县| 卫辉市| 孝义市| 瓮安县| 喀喇沁旗| 勐海县| 五台县| 新密市| 棋牌| 垣曲县| 新竹市| 巴青县| 万荣县| 遵化市| 沈阳市| 宣武区| 前郭尔| 渭源县| 新竹市| 平昌县| 张家港市| 宁国市| 沈阳市| 凤冈县| 万源市|