精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入了解Java 8 新特性:lambda表達式進階

開發 前端
Java的函數式編程就是Lambda表達式,java的函數式接口的有一個明顯特征:有且僅有一個抽象方法的接口。

前言

Java 8中的Lambda表達式是一種匿名函數,它允許你將函數作為方法參數進行傳遞,或者把代碼更簡潔地定義在你的應用程序里。另外Java的函數式編程就是Lambda表達式,java的函數式接口的有一個明顯特征:有且僅有一個抽象方法的接口。下面是一些常見的Java內置的函數式接口梳理,掌握這些內置的函數式接口是相當有必要的,因為作為一種更簡潔、更靈活和更易于維護的編程方式,這在很多的java相關的框架技術中有大量的應用,相信有喜歡鉆研源碼小伙伴應該深有體會。

Java內置的函數式接口

Function

Function接口是Java 8中引入的一個函數式接口,它位于java.util.function包中。這個接口表示一個輸入參數能夠產生一個結果的函數。Function接口只有一個抽象方法,即apply(T t),它接受一個參數并返回一個結果。

@FunctionalInterface
public interface Function<T, R> {


    R apply(T t);


    default <V> Function<V, R> compose(Function<? super V, ? extends T> before) {
        Objects.requireNonNull(before);
        return (V v) -> apply(before.apply(v));
    }


    default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t) -> after.apply(apply(t));
    }


    static <T> Function<T, T> identity() {
        return t -> t;
    }
}

下面是一個使用Function接口的簡單示例:

@Test
public void test5() {
    Function<String, Student> function = str -> new Student(str);
    Student student = function.apply("張三");
    log.info(student.getName());
}

在Java中,Function接口的默認實現包括以下幾種:

  • Function. andThen(Function after):這個方法返回一個新函數,它首先應用原始函數,然后應用另一個函數。也就是說,這個新函數首先將輸入映射到某個結果,然后將結果映射到另一個結果。假設我們有一個Function<Integer,Integer>,它接受一個整數作為輸入,并返回一個整數作為輸出。現在,我們想在這個函數的基礎上添加一個新的函數,將得到的整數加倍。
@Test
public void test7() {
    Function<Integer, Integer> originalFunction = x -> x * 2;
    Function<Integer, Integer> newFunction = x -> x * 2;
    Function<Integer, Integer> composedFunction = originalFunction.andThen(newFunction);
    int input = 5;
    int result = composedFunction.apply(input);
    System.out.println(result);  // 輸出:20
}

在上面的示例中,我們定義了一個原始函數originalFunction,它接受一個整數作為輸入,并將其乘以2。然后,我們定義了一個新的函數newFunction,它也接受一個整數作為輸入,并將其乘以2。接下來,我們使用andThen方法將這兩個函數組合成一個新的函數composedFunction。最后,我們將輸入整數5傳遞給composedFunction,并打印結果。在這個例子中,首先將輸入整數5乘以2得到10,然后將10乘以2得到20,最終輸出結果為20。

  • Function. compose(Function before):這個方法返回一個新函數,它首先應用另一個函數,然后將結果映射到原始函數的輸入。也就是說,這個新函數首先將輸入映射到另一個輸入,然后將這個輸入映射到結果。假設我們有兩個函數,一個將字符串轉換為大寫,另一個將字符串長度截斷為5個字符。這兩個函數可以組合成一個新函數,首先將字符串轉換為大寫,然后將其長度截斷為5個字符。
@Test
public void test6(){
    Function<String, String> toUpperCase = str -> str.toUpperCase();
    Function<String, String> truncate = str -> str.substring(0, 6);
    Function<String, String> composedFunction = toUpperCase.compose(truncate);
    String input = "hello world!";
    String result = composedFunction.apply(input);
    System.out.println(result);  // 輸出:"HEL"
}

在上面的示例中,我們首先定義了兩個函數:toUpperCase和truncate。然后,我們使用compose方法將它們組合成一個新函數composedFunction。最后,我們調用composedFunction對輸入字符串進行操作,并打印結果。

BiFunction

BiFunction接口是Java 8中引入的一個函數式接口,它位于java.util.function包中。BiFunction接口表示一個接受兩個輸入參數并返回一個結果的函數。它與Function接口類似,但多了一個輸入參數。

BiFunction接口的定義如下:

@FunctionalInterface
public interface BiFunction<T, U, R> {


    R apply(T t, U u);
  
    default <V> BiFunction<T, U, V> andThen(Function<? super R, ? extends V> after) {
        Objects.requireNonNull(after);
        return (T t, U u) -> after.apply(apply(t, u));
    }
}

其中,TU是輸入參數的類型,R是返回結果的類型。apply()方法是抽象的,需要具體的實現來提供具體的邏輯。

下面是一個使用BiFunction接口的示例:

@Test
public void test8() {
    BiFunction<Integer, Integer, Integer> add = (x, y) -> x + y;
    int result = add.apply(2, 3);
    System.out.println(result);  // 輸出:5
}

在上面的示例中,我們定義了一個add函數,它接受兩個整數作為輸入,并將它們相加得到一個整數作為結果。我們使用apply()方法調用該函數并傳遞兩個參數2和3,然后打印結果5。

BiFunction接口包含一個默認實現,即andThen方法,用于將兩個函數組合在一起。它接受一個BiFunction作為參數,并返回一個新的函數,該函數將先應用原始函數,然后應用給定的函數。

@Test
public void test9() {
    BiFunction<Integer, Integer, String> addAndToString = (x, y) -> Integer.toString(x + y);
    Function<String, String> toUpperCase = str -> str.toUpperCase();
    BiFunction<Integer, Integer, String> composedFunction = addAndToString.andThen(toUpperCase);
    int input1 = 2;
    int input2 = 3;
    String result = composedFunction.apply(input1, input2);
    System.out.println(result);  // 輸出:"5"  
}

在上面的示例中,我們定義了一個addAndToString函數,它接受兩個整數作為輸入,并將它們的和轉換為字符串。然后,我們定義了一個toUpperCase函數,它接受一個字符串作為輸入,并將其轉換為大寫。接下來,我們使用andThen方法將兩個函數組合成一個新的函數composedFunction。最后,我們調用composedFunction對輸入整數2和3進行操作,并打印結果"5"。首先將輸入整數2和3相加得到5,然后將5轉換為字符串"5",最后將字符串"5"轉換為大寫"5",最終輸出結果為"5"。

Predicate

Predicate 是 Java 中的一個函數式接口,它位于 java.util.function 包中。這個接口用于表示一個參數的謂詞(即,條件判斷),接收一個參數并返回一個布爾值,通常用于判斷參數是否滿足指定的條件

@FunctionalInterface
public interface Predicate<T> {


    boolean test(T t);


    default Predicate<T> and(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) && other.test(t);
    }


    default Predicate<T> negate() {
        return (t) -> !test(t);
    }


    default Predicate<T> or(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    }


    static <T> Predicate<T> isEqual(Object targetRef) {
        return (null == targetRef)
                ? Objects::isNull
                : object -> targetRef.equals(object);
    }


    @SuppressWarnings("unchecked")
    static <T> Predicate<T> not(Predicate<? super T> target) {
        Objects.requireNonNull(target);
        return (Predicate<T>)target.negate();
    }
}

Predicate接口的主要方法是 test(),它接收一個參數并返回一個布爾值。下面是一個簡單的例子:

@Test
public void test3(){
    Student student = new Student("張三");
    Predicate<Student> predicate= obj -> "張三".equals(obj.getName());
    boolean flag = predicate.test(student);
    Assert.isTrue(flag,"test fail");
    boolean flag2 = predicate.test(new Student("李四"));
    Assert.isTrue(flag2,"test fail");
}

Predicate:常用的四個方法:

  • boolean test(T t):對給定的參數進行判斷(判斷邏輯由Lambda表達式實現),返回一個布爾值。
  • default Predicate negate():返回一個邏輯的否定,對應邏輯非。
  • default Predicate and(Predicate other):返回一個組合判斷,對應短路與。
  • default Predicate or(Predicate other):返回一個組合判斷,對應短路或。
@Test
public void test4(){
    Student student = new Student("張三");
    Predicate<Student> predicate= obj -> "張三".equals(obj.getName());
    Predicate<Student> predicate2= obj-> "李四".equals(obj.getName());
    Predicate<Student> or = predicate2.or(predicate);
    boolean flag = or.test(student);
    Assert.isTrue(flag,"test fail");
    student.setName("李四");
    boolean flag2 = or.test(student);
    Assert.isTrue(flag2,"test fail");
    Predicate<Student> predicate3=obj->18==obj.getAge();
    student.setAge(18);
    Predicate<Student> and = predicate3.and(predicate2);
    boolean flag3 = and.test(student);
    Assert.isTrue(flag3,"test fail");
    student.setName("鐵蛋");
    boolean test = and.test(student);
    Assert.isTrue(test,"學生姓名不等于張三或者李四");
}

Consumer

Consumer接口代表了一個接受輸入參數并返回void的函數。它的主要作用是消費輸入數據,也就是說,對輸入進行某種操作,但不返回任何結果。

@FunctionalInterface
public interface Consumer<T> {


    void accept(T t);
    
    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}
Consumer接口的主要方法是void accept(T t):對給定的參數執行此操作。
@Test
public void test2() {
    Student student = new Student("zhangsan");
    Consumer<String> nameConsumer = str -> student.setName(str);
    nameConsumer.accept("lisi");//設置學生的姓名為拼音-小寫
    log.info(student.getName());
    Assert.isTrue("lisi".equals(student.getName()), "test fail!");  
}

Consumer接口的默認實現,andThen方法,用于將兩個Consumer合并在一起。它允許你將一個操作(即第二個Consumer)附加到另一個操作(即第一個Consumer)的后面,以便在原始操作完成之后執行附加操作。

下面是一個簡單的示例,演示如何使用andThen方法:

@Test
public void test2() {
    Student student = new Student("zhangsan");
    Consumer<String> nameConsumer = str -> student.setName(str);
    Consumer<String> nameConsumer2 = name -> student.setName(name.toUpperCase());
    Consumer<String> nameConsumer3 = nameConsumer.andThen(nameConsumer2);//設置學生的姓名為拼音-大寫
    nameConsumer3.accept("lisi");
    log.info(student.getName());
    Assert.isTrue("LISI".equals(student.getName()), "test fail!");
}

Supplier

這個接口表示一個不接受任何參數但返回結果的函數

@FunctionalInterface public interface Supplier<T> {    T get(); }

特點:

  • 該方法不需要參數,它會按照某種實現邏輯(由Lambda表達式實現)返回一個數據。
  • Supplier接口也稱為生產型接口,如果我們指定了接口的泛型是什么類型,那么接口中的get方法就會生產什么類型的數據供我們使用。

使用示例:

private String getStuName(Supplier<Student> supplier) {
    String name = supplier.get().getName();
    return name;
}


@Test
public void test() {
    String name = this.getStuName(() -> new Student("zhangsan"));
    log.info(name);
    Assert.isTrue(name.equals("zhangsan"), "test fail");
}


責任編輯:武曉燕 來源: 凡夫貶夫
相關推薦

2021-05-05 11:31:15

JDK新特性Lambda表達式Java8

2012-06-26 10:03:58

JavaJava 8lambda

2023-12-29 08:54:02

Optional個性化服務

2024-02-04 08:35:03

APIJava 8數據庫

2024-02-02 11:18:37

Java 8API對象

2013-04-07 15:44:26

Java8Lambda

2023-12-13 10:12:40

Python函數lambda

2013-04-07 10:04:03

Java8Lambda

2015-08-04 09:16:20

JavaLambda表達式

2009-09-11 09:48:27

Linq Lambda

2009-08-10 10:06:10

.NET Lambda

2022-12-05 09:31:51

接口lambda表達式

2009-09-15 15:18:00

Linq Lambda

2009-09-09 13:01:33

LINQ Lambda

2024-10-10 14:43:54

LambdaSpring編程

2022-02-28 10:30:03

架構代碼Native

2012-07-18 09:45:32

Java 8ScalaLambda

2023-10-06 00:04:02

2009-09-17 09:44:54

Linq Lambda

2009-09-17 10:40:22

Linq Lambda
點贊
收藏

51CTO技術棧公眾號

高清视频一区| 中日韩午夜理伦电影免费| 国产a级片免费看| 久久青青草原亚洲av无码麻豆| 红杏视频成人| 日韩欧美国产视频| 日韩在线国产| 成人毛片在线免费观看| 日日夜夜精品视频免费| 久久成人亚洲精品| 在线观看日本中文字幕| 91精品短视频| 欧美三级视频在线播放| 日韩欧美猛交xxxxx无码| 黄色免费在线播放| 成人综合在线网站| 成人精品在线视频| 神马久久久久久久| 激情综合视频| 欧美成人一区二区三区电影| 亚洲精品视频久久久| 秋霞一区二区| 欧美色欧美亚洲另类二区| 日韩欧美不卡在线| 亚洲制服国产| 国产精品每日更新在线播放网址| 黄色99视频| 国产理论视频在线观看| 日本不卡中文字幕| 欧美最猛性xxxxx(亚洲精品)| 国内偷拍精品视频| 91综合视频| 在线中文字幕日韩| 亚洲综合网在线观看| 精品国产一区二区三区成人影院| 欧美日韩成人在线| 国产又大又黄又粗的视频| 多野结衣av一区| 亚洲国产一区二区a毛片| 三年中文高清在线观看第6集| 黄色美女网站在线观看| av电影天堂一区二区在线| 亚洲自拍欧美色图| 国产乱码精品一区二三区蜜臂| 日韩和欧美一区二区三区| 97香蕉久久夜色精品国产| 久久久久久久极品内射| 欧美 日韩 国产一区二区在线视频| 中文国产成人精品久久一| 九九热免费在线| 国产成人调教视频在线观看 | 国产午夜伦鲁鲁| 国内在线视频| 亚洲国产欧美在线人成| 国产亚洲黄色片| 成年男女免费视频网站不卡| 午夜一区二区三区视频| 欧美一级视频免费看| 丁香花在线影院| 五月婷婷综合网| 鲁一鲁一鲁一鲁一澡| 欧美aa免费在线| 婷婷成人激情在线网| 国内自拍在线观看| 国产精品迅雷| 欧美色窝79yyyycom| www.国产福利| 日韩一区二区三区高清在线观看| 日韩一区二区免费视频| 国产精品偷伦视频免费观看了| 成人福利一区| 亚洲精品日韩欧美| 久久久免费看片| 在线中文字幕第一区| 久久久久久综合网天天| 99超碰在线观看| 免费成人av在线播放| 亚洲最大的av网站| 五十路在线视频| 中文字幕欧美区| 美女在线免费视频| 国产va在线视频| 欧美色男人天堂| 五月六月丁香婷婷| 韩国女主播一区二区三区| 亚洲欧美日韩天堂| 国产免费美女视频| 国产一区二区你懂的| 国产精品精品视频一区二区三区| 国产情侣一区二区| 91玉足脚交白嫩脚丫在线播放| 五月天丁香综合久久国产 | 在线日韩一区| 久久夜色精品国产欧美乱| 激情综合网五月婷婷| 日韩精品国产精品| 鬼打鬼之黄金道士1992林正英| 你懂的免费在线观看视频网站| 中文字幕永久在线不卡| 男人天堂1024| 这里视频有精品| 中文字幕日韩欧美在线| 久草精品视频在线观看| 久久国产日韩欧美精品| 黑人巨大精品欧美一区二区小视频| 成人高清免费在线播放| 亚洲超丰满肉感bbw| 麻豆三级在线观看| 日韩三级av| 欧美xxxx14xxxxx性爽| 无码视频在线观看| 成人禁用看黄a在线| 正在播放一区二区三区| 肉色欧美久久久久久久免费看| 91精品国产综合久久久蜜臀粉嫩 | 亚洲成人综合视频| 中文字幕久久av| 最近国产精品视频| 欧美黑人性视频| 一区二区三区黄| 97久久精品人人做人人爽| 老汉色影院首页| 美女色狠狠久久| 亚洲欧美日韩国产中文专区| 国产精品不卡av| 国产一区二区在线观看视频| 先锋在线资源一区二区三区| 正在播放日韩精品| 亚洲国产精久久久久久| 在线免费日韩av| 国模无码大尺度一区二区三区| 五月天色一区| 日本精品不卡| 亚洲欧美综合另类中字| 欧美特黄aaaaaa| 99久久99久久综合| 欧美乱大交xxxxx潮喷l头像| gogo人体一区| 国内精品久久久久伊人av| 亚洲精品字幕在线观看| 亚洲精品乱码久久久久久| 五月天婷婷亚洲| 日韩理论电影| 国产有码一区二区| 在线国产91| 欧美日韩国产综合久久| 999久久久国产| 久久精品二区亚洲w码| 亚洲欧美99| 巨大黑人极品videos精品| 色偷偷av一区二区三区| 一级做a爰片久久毛片16| 中文字幕佐山爱一区二区免费| 91亚洲免费视频| 国产精品99视频| 亚洲www视频| 怡红院红怡院欧美aⅴ怡春院| 日韩欧美成人激情| 久久久久久久伊人| 久久尤物电影视频在线观看| 麻豆av免费在线| 日韩国产欧美一区二区| 成人av番号网| 黄页在线观看免费| 亚洲精品资源在线| 久久精品国产亚洲av麻豆蜜芽| 中文字幕二三区不卡| www.污污视频| 国内精品美女在线观看| 精品久久蜜桃| 国产成人77亚洲精品www| 日韩中文字幕国产| www香蕉视频| 欧美午夜精品久久久久久浪潮| 国产中年熟女高潮大集合| 美腿丝袜亚洲综合| 亚洲国产一二三精品无码 | 亚洲国产精品久久| 无码视频在线观看| 亚洲六月丁香色婷婷综合久久 | 成人在线超碰| 97国产精品久久| 国产黄在线看| 日韩精品中文字幕在线一区| 一级片中文字幕| 国产精品久久久99| 男男做爰猛烈叫床爽爽小说 | 国产精品综合不卡av| 亚洲第一图区| 亚洲视频在线播放| av免费在线不卡| 色香蕉久久蜜桃| 三级av在线免费观看| 91在线观看下载| a级大片免费看| 视频一区国产视频| 免费看黄色a级片| 国产剧情在线观看一区| 91免费看蜜桃| 国产美女久久| 欧美一二三视频| 伊人福利在线| 日韩中文字幕欧美| 国产在线一二| 亚洲的天堂在线中文字幕| 国产精品高潮呻吟久久久| 精品福利一区二区| 1024手机在线视频| 久久精品一区二区三区不卡 | 欧美日韩中文一区二区| 不卡一区二区三区视频| 国产成人77亚洲精品www| 7777kkkk成人观看| 欧洲性视频在线播放| 精品国产美女在线| 国产女人在线观看| 日韩成人在线网站| 免费国产精品视频| 欧美一卡二卡三卡| 91亚洲国产成人精品一区| 欧美性生交xxxxx久久久| 久草中文在线视频| 自拍偷拍国产精品| 精品国产大片大片大片| 国产亚洲视频系列| 波多野结衣先锋影音| 懂色av一区二区夜夜嗨| 亚洲综合20p| 蜜桃久久久久久久| 99草草国产熟女视频在线| 亚洲欧美大片| 中国丰满人妻videoshd| 国产欧美亚洲一区| 人妻少妇精品无码专区二区| 欧美成人久久| 免费人成在线观看视频播放| 欧美黄免费看| 青草全福视在线| 欧美91视频| 波多野结衣 作品| 伊人色**天天综合婷婷| 日本一级淫片演员| 91成人观看| 激情视频小说图片| 国内精品久久久久久久97牛牛| 国产免费裸体视频| 亚洲第一精品影视| 欧美亚洲国产成人| 国产亚洲福利| 最近免费中文字幕中文高清百度| 久久精品麻豆| 免费看涩涩视频| 国产最新精品精品你懂的| www.污污视频| 国产成人久久精品77777最新版本| 日本黄色www| 成人av免费网站| 日本一级片在线播放| 久久久亚洲精品石原莉奈| 精品人妻互换一区二区三区| 国产亚洲综合在线| 懂色av蜜臀av粉嫩av永久| 亚洲男人天堂av| 日韩av男人天堂| 色婷婷久久一区二区三区麻豆| 欧美性猛交xxxx乱大交hd| 欧美理论片在线| 亚洲国产精品久久久久久久| 亚洲精品www久久久| 黄色av免费在线观看| 日韩最新在线视频| free性欧美16hd| 国产91亚洲精品| 国产一区二区av在线| 国产精品久久久久久久第一福利| 最新中文字幕2018| 国产一区二区三区免费在线观看| 国产av一区二区三区传媒| 99视频有精品| 欧美成人久久久免费播放| 亚洲综合在线视频| 一级成人黄色片| 69av一区二区三区| 香蕉视频黄在线观看| 这里只有精品丝袜| 9lporm自拍视频区在线| 国产成人涩涩涩视频在线观看 | 在线电影一区二区三区| 成人精品在线播放| 这里只有精品在线观看| 国产乱妇乱子在线播视频播放网站| 奇米成人av国产一区二区三区| 亚洲精品tv| 精品在线一区| 中文字幕日韩一区二区不卡 | 亚洲免费不卡| 亚洲激情午夜| 国产美女视频免费看| 91啪九色porn原创视频在线观看| 特级西西人体高清大胆| 午夜国产不卡在线观看视频| 国产精品女同一区二区| 亚洲精品在线不卡| 青青草视频在线免费直播| 国产精品色视频| 午夜精品福利影院| 国产精品久久久久7777| 国产在线精品视频| 成都免费高清电影| 亚洲成人一区在线| 国产精品伊人久久| 中文字幕精品一区久久久久| 中文在线免费二区三区| 成人免费视频观看视频| 婷婷激情图片久久| 爱情岛论坛成人| 久久丝袜美腿综合| 影音先锋亚洲天堂| 精品少妇一区二区三区视频免付费| 77导航福利在线| 国产成人精品一区二区| 欧美福利在线播放网址导航| 日韩一级特黄毛片| 国产在线精品免费| 日本美女bbw| 欧洲国产伦久久久久久久| 天堂影院在线| 国内精品小视频在线观看| 亚洲**毛片| 看一级黄色录像| 韩国av一区二区三区| 亚洲天堂最新地址| 欧美性大战久久久久久久| 久草视频在线看| 日韩美女视频免费在线观看| 成人av婷婷| 成人免费观看cn| 成人福利视频在线| 日本三级免费看| 亚洲第一色在线| 国产在线天堂www网在线观看| 国产精品三区四区| 尹人成人综合网| 岛国精品资源网站| 精品欧美国产一区二区三区| 污视频软件在线观看| 欧美一区二区三区免费视| 香蕉一区二区| 能在线观看的av网站| 国产精品日产欧美久久久久| 中文字幕乱码中文字幕| 最近2019中文字幕mv免费看 | 51av在线| 蜜桃网站成人| 日韩精品一二三四| 国产喷水在线观看| 日韩欧美高清一区| 日韩精品美女| 日韩国产精品一区二区| 美女性感视频久久| 黑鬼狂亚洲人videos| 欧美成人高清电影在线| 欧美aa一级| 日本高清一区| 国产一区二区三区av电影| 麻豆亚洲av熟女国产一区二| 亚洲国内精品视频| japanese23hdxxxx日韩 | 极品少妇一区二区三区| 黄色av网址在线观看| 色999日韩国产欧美一区二区| 77导航福利在线| 99中文字幕| 美女国产精品| 国产黄色录像片| 亚洲精品一线二线三线| 日韩新的三级电影| 日本a级片在线观看| 99re8在线精品视频免费播放| 中文字幕av第一页| 欧美日韩爱爱视频| 九九亚洲视频| 美女又黄又免费的视频| 一本到高清视频免费精品| 一本一道波多野毛片中文在线| av一区二区三区免费| 视频一区二区不卡| 天天干中文字幕| 亚洲欧美日韩精品久久亚洲区 | 欧美性x x x| 日韩精品久久久久| www.91精品| 欧美性久久久久| 亚洲精品日韩专区silk| 亚洲av电影一区| 91在线观看免费高清完整版在线观看| 在线亚洲精品| 麻豆疯狂做受xxxx高潮视频| 国产亚洲免费的视频看| 国产成人福利av|