国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一文搞懂Java中的lambda匿名函數

開發 前端
Lambda函數,也稱為Lambda表達式,是Java 8版本新增的一項功能。它提供了一種簡潔的方式來定義小型匿名函數,這些函數可以作為參數傳遞給其他方法或作為返回值使用。

1 Lambda表達式

Lambda函數,也稱為Lambda表達式,是Java 8版本新增的一項功能。它提供了一種簡潔的方式來定義小型匿名函數,這些函數可以作為參數傳遞給其他方法或作為返回值使用。

語法:

Lambda表達式可以使用這個語法->來表示。

示例:

零參數:() -> expression

interface PrintInfo {
  void print();
 }

 class TestLambda {
  
    static void printJob(PrintInfo printInfo) { 
      printInfo.print(); 
    }
  
    public static void main(String[] args) {
       printJob(() -> System.out.println("We're learning Java 8 fundamentals !"));
    }
 }

Output: We’re learning Java 8 fundamentals !

一個參數:parameter -> expression

interface PrintInfo {
  void print(String data);
 }

 class TestLambda {

  static void printJob(PrintInfo printInfo, String data) {
   printInfo.print(data);
  }

  public static void main(String[] args) {
   printJob(statement -> System.out.println("We're learning " + statement), "Lambda");
  }
 }

Output: We're learning Lambda

多個參數:(parameter1, parameter2) -> expression

interface PrintInfo {
  void print(String data1, String data2);
 }

 class TestLambda {

  static void printJob(PrintInfo printInfo, String data1, String data2) {
   printInfo.print(data1, data2);
  }

  public static void main(String[] args) {
   printJob((statement1, statement2) -> System.out.println("We're learning " + statement1 + " and "+ statement2), "Lambda", "it's uses");
  }
 }

Output: We're learning Lambda and it's uses

復雜表達式:(parameter1, parameter2) -> { complex code block }

interface PrintInfo {
  void print(String data1, String data2);
}

 class TestLambda {

  static void printJob(PrintInfo printInfo, String data1, String data2) {
     printInfo.print(data1, data2);
  }

  public static void main(String[] args) {
     printJob((statement1, statement2) -> {
        System.out.println("We're learning " + statement1 + " and "+ statement2);
        System.out.println("This is a multi line lambda");
        System.out.println("This is a complex lambda implementation");
       }, 
        "Lambda",
        "it's uses"
      );
   }
 }

Output: We’re learning Lambda and it’s uses

This is a multi line lambda

This is a complex lambda implementation

2 方法引用

方法引用是一種緊湊、易讀的Lambda表達式,用于已經具有名稱的方法。簡單地說,我們可以使用方法引用從Lambda函數中調用方法。

語法:

Object::method

讓我們來看看如何使用Lambda打印列表中的元素:

public void print(List<String> list) {
    list.forEach(l -> System.out.println(l));
}

可以使用方法引用,如下所示:

public void print(List<String> list) {
    list.forEach(System.out::println);
}

如您所見,這使代碼更加清晰、精確和易于閱讀。

同樣地,我們可以使用Classname::methodName來表示對靜態方法的調用。

public static void main(String[]args){
    List<String> fruits = new ArrayList<>();
    fruits.add("mango");
    fruits.add("banana");
    fruits.add("kiwi");
    fruits.add("orange");

    fruits.forEach(Test::process);
}

private static void process(String value) {
    System.out.println("processed fruit: " + value);
}

同時,我們可以使用Object to be instantiated::new來使用方法引用引用構造函數。

public static void main(String[]args){
      List<String> fruits = new ArrayList<>();
      fruits.add("mango");
      fruits.add("banana");
      fruits.add("kiwi");
      fruits.add("orange");

      fruits.stream()
              .map(Fruit::new)
              .toArray(Fruit[]::new);
}

class Fruit {
    public Fruit(String name) {
        this.name = name;
    }
}

方法引用也可以用于Comparator。

按名稱對水果列表排序:

public static void process(List<Fruit> fruits) {
    fruits.stream()
            .sorted(Comparator.comparing(Fruit::getName))
            .forEach(System.out::println);
}

3 Lambda的不同用途

遍歷列表

public static void main(String[] args) {
   List<String> fruits = List.of("mango", "oranges", "banana", "kiwi", "apple");
   fruits.forEach(fruit -> System.out.println(fruit));
}

遍歷Map

public static void main(String[] args) {
   Map<String, Integer> map = new HashMap<>();
   map.put("value1", 10);
   map.put("value2", 20);
   map.put("value3", 30);
   map.put("value4", 40);
   map.forEach((key, value) -> System.out.println("key: " + key + ", value: " + value));
  }

創建Runnable和Callable

Runnable是一個函數式接口,因此我們可以使用Lambda表達式來表示它。

使用匿名類創建Runnable的典型方式

public static void main(String[] args) {
  Runnable runnable = new Runnable() {
     @Override
     public void run() {
        System.out.println("Hello World !");
     }
  };
}

同樣的Lambda表達式實現如下:

public static void main(String[] args) {
  Runnable runnable = () -> System.out.println("Hello World !");
}

同樣地,Callable也可以實現:

public static void main(String args[]) throws InterruptedException {
    Callable<Integer> callable = () -> {
      int sum = 0;
      for (int i = 0; i < 5; i++) {
        sum += i;
      }
      return sum;
    };
}

Predicate

使用Lambda函數表示Predicate:

public class HelloWorld{

     public static void main(String []args){
        Predicate<Integer> predicate = (i) -> i > 10;
        System.out.println(predicate.test(15));
     }
}

Output: True

Consumer

使用Lambda函數表示Consumer:

public class HelloWorld{

     public static void main(String []args){
       //例1
        Consumer<Integer> consumer = System.out::println;
        consumer.accept(10);

       //例2
        List<String> inputs = new ArrayList<>();
        Consumer<String> consumer = str -> inputs.add(str);
        consumer.accept("first");
        consumer.accept("second");
        inputs.forEach(e -> System.out.println(e));
     }
}

Example 1 output: 10,Example 2 output: first \n second

Comparator

Comparator是Java中的一個函數式接口,因此我們可以使用Lambda函數來表示它。

下面我們使用Lambda創建一個Comparator:

public static void process(List<Movie> movies) {
    Comparator<Movie> movieComparator = (m1, m2) -> m1.getRating() - m2.getRating();
    movies.sort(movieComparator);
}

讓我們看看更多的例子:

按自然順序排序數字列表:

private static void process(List<Integer> numbers) {
    numbers.stream()
            .sorted(Comparator.naturalOrder())
            .forEach(System.out::println);
}

如果我們要根據多個參數對列表進行排序,則可以使用Comparator的thenComparing方法,如下所示:

private static void process(List<Movie> movies) {
    movies.stream()
            .sorted(Comparator.comparing(Movie::getName)
                    .thenComparing(Movie::getRating)
            )
            .forEach(System.out::println);
}

將排序后的列表反轉:

private static void process(List<Movie> movies) {
    movies.stream()
            .sorted(Comparator.comparing(Movie::getName)
            .thenComparing(Movie::getRating)
            .reversed())
            .forEach(System.out::println);
}

4 總結

本文中,我們探討了Lambda函數,看了很多不同的Lambda函數的例子,我們還了解了如何使用方法引用和Comparator。

責任編輯:武曉燕 來源: Java學研大本營
相關推薦

2023-07-04 08:56:07

指針類型Golang

2024-11-19 13:20:55

2021-09-07 09:46:40

JavaScriptGenerator函數

2022-03-24 08:51:48

Redis互聯網NoSQL

2024-04-12 12:19:08

語言模型AI

2021-12-29 17:38:17

JavaScripttypeof前端

2021-03-22 10:05:59

netstat命令Linux

2023-09-15 12:00:01

API應用程序接口

2023-09-08 08:20:46

ThreadLoca多線程工具

2023-04-12 08:38:44

函數參數Context

2021-09-11 10:41:27

PythonPickle模塊

2020-05-15 16:37:13

PowerBI數據分析

2022-05-05 16:47:24

Docker網絡空間容器

2021-07-08 10:08:03

DvaJS前端Dva

2021-03-04 00:09:31

MySQL體系架構

2021-02-28 20:53:37

Cookie存儲瀏覽器

2020-09-03 06:35:44

Linux權限文件

2023-09-02 21:27:09

2023-03-06 21:29:41

mmap技術操作系統

2020-12-07 06:19:50

監控前端用戶
點贊
收藏

51CTO技術棧公眾號

在线观看日韩毛片| 久久精品欧美视频| 美女国产一区二区| 97视频色精品| 亚洲国产精品三区| 精品一区二区精品| 国产一区在线免费观看| 国产精品久久久久9999赢消| 国模视频一区二区三区| www.一区| 日韩女优av电影在线观看| 免费人成在线观看网站| 性久久久久久久久| 中文字幕在线中文字幕二区| 亚洲欧美日韩电影| 福利片免费在线观看| 国产精品久久久久aaaa| 黄色永久免费网站| 国产精品青草久久| 最近中文字幕2019第二页视频| 成人免费高清在线| 欧美国产日韩激情| av电影天堂一区二区在线观看| 黄色三级中文字幕| 岛国av在线一区| 国产 日韩 亚洲 欧美| 处破女av一区二区| 欧美v在线观看| 国产视频在线观看一区二区三区| 中文字幕乱码人妻综合二区三区| 久久久777精品电影网影网| 任你操这里只有精品| 久久精品视频免费观看| 国产黄色片大全| 欧美性猛交视频| 久久国产主播精品| 国产欧美日韩| 色国产精品一区在线观看| 国产日韩中文字幕| 日韩不卡一二三| 伊伊综合在线| 亚洲精品成人天堂一二三| 国产精品v欧美精品v日韩| 在线观看h网| 亚洲精品中文在线| 国产一区二区高清不卡| 成人性生交大片免费看午夜| 成人在线观看免费| 色一区二区三区四区| 日韩欧美福利视频| 国产精品久久网| 欧美老女人第四色| 国产精品亚洲午夜一区二区三区| 亚洲国产另类久久精品| 爱福利在线视频| 噜噜噜噜噜久久久久久91| 91成人网在线观看| 久久久久久九九九九| 国产一区不卡视频| 91插插插插插插插插| 黑人精品xxx一区一二区| 国产黄大片在线观看画质优化| 亚洲女人天堂成人av在线| 第四色在线一区二区| 国产精品亚洲不卡a| 成人午夜激情在线| 麻豆影视在线观看| 亚洲国产精品系列| 欧美大胆视频| 欧美激情视频一区二区三区| 91麻豆国产福利在线观看| 三级av在线| 一本久久综合亚洲鲁鲁| 国产尤物久久久| 2021狠狠干| 亚洲系列另类av| 国产自产在线视频一区| 99热这里都是精品| 3d成人动漫在线| 美女av一区二区| 99热免费精品在线观看| 色一情一乱一伦一区二区三区日本| 欧美三级电影精品| 岛国成人av| 一个色的综合| 亚洲黑丝一区二区| 国产精品久久久久7777| 色婷婷精品久久二区二区蜜臀av| 韩国理伦片久久电影网| 国产一区二区在线观看免费播放| 久久综合成人精品亚洲另类欧美 | 一区二区美女| 欧美日韩在线播放一区二区| 亚洲免费资源在线播放| 91亚洲精品| 鲁丝片一区二区三区| 亚洲猫色日本管| 欧美成人一二区| 色之综合天天综合色天天棕色| 成人免费在线播放视频| av高清一区| 欧美日韩另类丝袜其他| 狠狠躁天天躁日日躁欧美| 97品白浆高清久久久久久| 一区二区三区免费看| 日本精品视频一区二区| 亚洲色图美女| 午夜视频你懂的| www.xxxx欧美| 国产一区二区三区国产| a级毛片免费观看在线| 亚洲一区二区在线播放| 伊人开心综合网| 日韩影片在线观看| 国产又粗又猛又爽又黄的网站| 欧美色精品在线视频| 国产乱码精品一区二区亚洲 | 日韩影院在线观看| 国产综合在线观看| 热99久久精品| 国产精品乱人伦中文| 久久av偷拍| 欧美丰满老妇厨房牲生活| 日韩精品一级二级| 免费在线高清av| 亚洲最大av在线| 亚洲国产视频直播| 久久精品av| 亚洲成av人影片在线观看| 欧美日韩免费视频| 色综合久久网| 国产性一级片| 97视频在线观看网址| 欧美高清在线一区二区| 国产人与zoxxxx另类91| 777777av| 久久久久久久一区二区三区| 久久久国际精品| 在这里有精品| 欧美变态xxxx| 国产精品午夜一区二区欲梦| 久久精品导航| 免费黄网在线观看| 欧美综合激情| 亚洲精品一区二区三区四区高清| 美女www一区二区| 网友自拍亚洲| 黄色片在线免费| 国产精品精品久久久久久| 婷婷六月综合亚洲| 午夜精品电影| 伊人在我在线看导航| 糖心vlog在线免费观看| 亚洲精品一区二区网址| 99re视频这里只有精品| 国内精品麻豆美女在线播放视频 | 1769视频在线播放免费观看| 久久riav二区三区| 亚洲精品狠狠操| 99久久国产免费看| 欧美sss在线视频| 在线伊人免费视频| 久久久久一区二区| 亚洲欧美制服综合另类| 国产清纯在线一区二区www| 中文字幕亚洲影视| 午夜激情视频在线| 免费看日本黄色| 69**夜色精品国产69乱| 日韩欧美综合在线视频| 麻豆精品一区二区av白丝在线| 未满十八勿进黄网站一区不卡| jizzjizzjizz亚洲女| 国产精品.com| 一二美女精品欧洲| 亚洲老司机在线| 天堂一区二区在线| 日本精品在线观看| 国产在线视频网站| 黄色成人在线免费观看| 国产精品7m视频| 亚洲精品在线观看视频| 国产欧美日韩麻豆91| 欧美日韩少妇| 2019年精品视频自拍| 中文字幕在线免费观看| 伊人精品久久久久7777| 午夜精品久久久久久久99热| 欧美性色综合网| 91视频国产资源| 狠狠综合久久| 精品一区二区三区中文字幕视频| 超碰国产在线| 欧美成人免费高清视频| 国产欧美精品一区二区三区| 不卡av电影院| 欧美一级视频精品观看| 国产精品免费久久久久| 日韩不卡一区二区三区| 亚洲裸色大胆大尺寸艺术写真|