精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

成人香蕉社区| 亚洲综合影视| 美女视频黄久久| 久久91精品国产91久久跳| 国产精品偷伦视频免费观看了| 国产伦精品一区二区三区视频网站| 欧美禁忌电影| 欧美一卡2卡三卡4卡5免费| 国产黄页在线观看| 欧美激情免费| 99精品国产99久久久久久白柏| 国产精品高清免费在线观看| 久热这里只有精品在线| 成人6969www免费视频| 亚洲精品一区在线观看| 一区二区免费av| 三级在线看中文字幕完整版| 岛国一区二区在线观看| 国产精品久久91| 日韩毛片在线视频| 亚洲成人免费| 在线播放日韩av| 三级视频网站在线观看| 亚洲精品大全| 中文字幕亚洲电影| 欧美主播一区二区三区美女 久久精品人 | 性欧美亚洲xxxx乳在线观看| 激情无码人妻又粗又大| 国产91精品在线| 欧美日韩中文在线观看| 2021国产视频| 免费在线午夜视频| 国产日本欧洲亚洲| 欧美另类网站| 亚洲 国产 欧美 日韩| 亚洲欧美日本日韩| 欧美激情乱人伦一区| 51精品免费网站| 亚洲一区二区电影| 欧美一区二区三区视频在线观看| 黄色aaa级片| 日韩久久一区二区三区| 中文字幕一区二区三区av| 日本不卡一区二区三区在线观看| 三级小视频在线观看| 日日欢夜夜爽一区| 日韩在线观看你懂的| 老牛影视av老牛影视av| 欧洲vs亚洲vs国产| 亚洲国产婷婷香蕉久久久久久| 日韩大尺度视频| 欧美日韩国产一区二区在线观看| 正在播放亚洲一区| 青青青青草视频| 国产精品蜜臀| 欧美国产日产图区| 日本视频一区在线观看| 国产鲁鲁视频在线观看免费| 久久精品一区二区| 91在线免费网站| 国产精品人妻一区二区三区| 精品一区二区三区在线观看国产| 国产欧美中文字幕| 国产精品欧美激情在线| 激情五月播播久久久精品| 91久久久久久久久久久久久| 国产男女猛烈无遮挡| 亚洲少妇诱惑| 久久久999精品视频| 紧身裙女教师波多野结衣| 亚洲婷婷丁香| 一区二区三区美女xx视频| 国产亚洲精品精品精品| 99精品小视频| 久久久久久国产精品| 男女啊啊啊视频| 青草av.久久免费一区| 91中文字幕在线观看| 亚洲精品中文字幕成人片 | 欧美中文字幕一二三区视频| 日本人69视频| 国产ts一区| 亚洲人在线观看| 小泽玛利亚一区二区免费| 亚洲日本国产| 久久高清视频免费| 国产欧美小视频| 亚洲成av人片乱码色午夜| 欧美日韩福利电影| 中文字幕精品视频在线观看| 国产一区二区福利| 国产啪精品视频| 亚洲免费不卡视频| 国产无人区一区二区三区| 天天爱天天做天天操| 香蕉伊大人中文在线观看| 欧美日韩一区二区三区在线| 亚州av综合色区无码一区| japanese国产精品| 久久久久久久久国产| 中文字幕日韩经典| www.视频一区| 国产久一道中文一区| 国产私人尤物无码不卡| 亚洲综合另类小说| 制服丝袜综合网| 日韩欧美国产大片| 日韩高清人体午夜| 黄视频网站免费看| 视频一区二区三区入口| 成人动漫视频在线观看完整版 | 久久综合九色综合97婷婷| 亚洲资源在线网| 成人免费短视频| 精品国一区二区三区| 在线视频这里只有精品| 久久xxxx| 国产精品国模在线| 男人天堂综合网| 亚洲日本护士毛茸茸| 五月婷婷深爱五月| 蜜臀91精品国产高清在线观看| 色综合色综合网色综合| 一区不卡在线观看| 欧美激情资源网| 热久久精品国产| 日韩av资源网| 97精品免费视频| 懂色av成人一区二区三区| 亚洲人吸女人奶水| 潘金莲激情呻吟欲求不满视频| 精品中文一区| 欧美中文字幕视频在线观看| 色婷婷av一区二区三| 亚洲最新在线观看| 伊人影院在线观看视频| 影音先锋日韩在线| 亚洲va电影大全| 快射av在线播放一区| 精品视频一区二区不卡| 国产一区二区三区精品在线| 欧美成人激情| 国产精品久久久久久五月尺| 精彩国产在线| 色噜噜狠狠一区二区三区果冻| 中文字幕av网址| 欧美一级二区| 欧美另类一区| 国产精品99| 色999日韩欧美国产| 一级片一区二区三区| ●精品国产综合乱码久久久久| 超碰在线公开97| 国产精品久久久久9999赢消| 91精品久久久久久久久久久| 国产激情视频在线| 日韩精品一区二区三区在线播放| 精品无码久久久久| 成人中文字幕电影| 男人操女人逼免费视频| 美女亚洲一区| 国产日韩av高清| av观看在线| 亚洲电影免费观看高清| 成年免费在线观看| 国产情人综合久久777777| 五月婷婷激情久久| 综合亚洲视频| 麻豆精品传媒视频| 国产91在线播放精品| 久久不射电影网| 色偷偷在线观看| 欧美亚洲日本国产| 无码人妻精品一区二区三区夜夜嗨| 国产成人一区二区精品非洲| 伊人成色综合网| 成人毛片在线| 97在线资源站| 97电影在线看视频| 欧美精品tushy高清| 久久婷婷一区二区| 日本一区二区免费在线| xxxx国产视频| 老鸭窝亚洲一区二区三区| 一区精品视频| 精品国产乱子伦一区二区| 国产精品高潮呻吟视频 | 97精品欧美一区二区三区| 每日更新在线观看av| 91精品婷婷国产综合久久性色 | 欧洲精品中文字幕| 欧美日韩国产精品综合| 26uuu欧美日本| 午夜xxxxx| 快she精品国产999| 欧美中文字幕在线观看视频| 性欧美lx╳lx╳| 成人中文字幕在线观看| 在线天堂中文资源最新版| 久久精品福利视频| 精品美女视频在线观看免费软件| 日韩欧美综合在线| 国产传媒免费在线观看| 91麻豆免费看| 韩国一区二区三区四区| 日韩avvvv在线播放| 日韩欧美不卡在线| 小小影院久久| 日韩一区二区三区高清| 久久久久97| 亚洲自拍偷拍网址| 热久久久久久| 国产91亚洲精品| 国产精品vvv| 欧美多人爱爱视频网站| 在线观看黄色av| 亚洲美女又黄又爽在线观看| 亚洲AV无码精品国产| 欧美三级中文字幕在线观看| 成年人免费高清视频| 亚洲一区影音先锋| 无码国产精品一区二区免费式直播| 日日夜夜精品视频天天综合网| 精品人妻少妇一区二区| 一区二区日韩欧美| 中文字幕欧美日韩一区二区| 欧美一级精品片在线看| 欧美少妇一区| 欧美日韩看看2015永久免费| 国产精品乱码一区二区三区| 99精品女人在线观看免费视频| 国产成人在线视频| sese综合| 日本免费一区二区三区视频观看| 黄色在线观看www| 国内外成人免费激情在线视频| 色av手机在线| 欧美激情成人在线视频| 怡红院av在线| 久久久久久久久综合| 在线你懂的视频| 色综合视频一区中文字幕| 中文字幕伦理免费在线视频 | 多男操一女视频| 亚洲欧美影音先锋| 国产传媒免费在线观看| 亚洲天堂2014| 国产三级国产精品国产国在线观看| 国产精品卡一卡二卡三| 日本黄色片免费观看| 亚洲精选在线视频| 久久久久久久极品内射| 亚洲二区在线视频| 亚洲一区欧美在线| 欧美日韩一区二区精品| 久久中文字幕免费| 欧美在线高清视频| 伊人网综合在线| 日韩一区二区三区av| 亚洲精品一区二区三区新线路| 精品国产三级电影在线观看| 日韩中文字幕免费观看| 亚洲精品一区二区三区婷婷月| 免费在线观看污视频| 一区二区成人av| 日本在线视频站| 欧美日韩国产999| 天天综合av| 国产精品丝袜一区二区三区| 91国产一区| 精品久久一区二区三区蜜桃| 亚洲天堂日韩在线| 欧美一级免费在线观看| 伊人久久成人| 五月婷婷之综合激情| 国产一区二区三区av电影 | 久久成人福利| 日韩精品成人一区二区在线观看| 五月婷婷亚洲| 免费观看国产精品视频| 日本视频在线一区| 少妇丰满尤物大尺度写真| 97aⅴ精品视频一二三区| 日本欧美一区二区三区不卡视频| 亚洲激情欧美激情| 亚洲av中文无码乱人伦在线视色| 欧美精品1区2区| 手机在线观看免费av| 中文国产成人精品| 成人性生交大片免费看网站| 国产精品999| julia中文字幕一区二区99在线| 日本一区免费看| 在线不卡亚洲| 奇米影视四色在线| 91亚洲精品一区二区乱码| 91久久久久久久久久久久久久| 亚洲v精品v日韩v欧美v专区| 最新国产中文字幕| 日韩精品欧美激情| 亚洲综合伊人久久大杳蕉| 国产精品激情自拍| 精品久久ai| 福利在线小视频| 美女在线视频一区| 少妇户外露出[11p]| 亚洲免费三区一区二区| 无码人妻丰满熟妇区bbbbxxxx| 欧美成人一区二区三区| 日韩免费网站| 日本欧美一级片| 久久精品66| 999久久欧美人妻一区二区| 久久se精品一区精品二区| 中文字幕5566| 亚洲大片精品永久免费| av免费在线不卡| 少妇高潮久久77777| 午夜日韩成人影院| 黄色99视频| 亚洲网站视频| 北条麻妃亚洲一区| 国产精品国产三级国产aⅴ原创| 中文字幕av影院| 日韩精品中文字幕在线观看| 超碰在线资源| 国产精品日韩欧美一区二区三区| 久久久久亚洲| 国内国产精品天干天干| 日本一二三不卡| 羞羞色院91蜜桃| 亚洲香蕉成人av网站在线观看| 中文不卡1区2区3区| 精品乱色一区二区中文字幕| 激情成人亚洲| 亚洲色图欧美另类| 亚洲国产日韩精品| 亚洲国产欧美另类| 国内精品一区二区三区四区| 亚洲视频精选| 亚洲国产成人精品无码区99| 成人激情黄色小说| 国产污视频在线观看| 亚州成人在线电影| www.成人免费视频| 欧美国产日韩免费| 红杏一区二区三区| 水蜜桃色314在线观看| 99久久精品一区二区| 午夜精品三级久久久有码| 日韩黄色av网站| 美女福利一区二区 | 午夜天堂精品久久久久| 老女人性生活视频| 亚洲高清中文字幕| 色视频免费在线观看| 少妇久久久久久| 香蕉成人在线| 中文字幕の友人北条麻妃| 福利一区二区在线观看| 国产稀缺真实呦乱在线| 国产偷亚洲偷欧美偷精品| 日韩欧美精品电影| 亚洲一区bb| 国产91精品久久久久久久网曝门| 国产午夜精品无码一区二区| 亚洲精品久久久久久久久久久久久 | 91av成人在线| 欧美伦理在线视频| 欧美国产日韩另类| 亚洲国产va精品久久久不卡综合| 五月婷婷六月激情| 国产精品一区二区电影| 91精品秘密在线观看| 亚洲午夜久久久久久久久| 91官网在线观看| 精品孕妇一区二区三区| 国内一区在线| 日韩有码一区二区三区| 亚洲av无码一区二区三区在线| 亚洲第一精品夜夜躁人人爽| 亚洲欧美在线成人| 精品视频在线观看一区二区| 久久这里只有精品6| 国产尤物在线观看| 国内自拍欧美激情| 久久在线电影| 免费黄色三级网站| 欧美中文字幕一区| 大桥未久在线播放| 亚洲精品一区二| 天堂成人免费av电影一区| 国产午夜精品理论片| 亚洲国产日韩欧美在线图片| 韩日精品一区| 97干在线视频| 亚洲欧洲另类国产综合| 天天影院图片亚洲| 亚洲精品免费一区二区三区| 日韩天天综合|