1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        使用 Lambda 表達(dá)式實(shí)現(xiàn)超強(qiáng)的排序功能!

        共 6433字,需瀏覽 13分鐘

         ·

        2021-12-17 15:46

        我們?cè)谙到y(tǒng)開(kāi)發(fā)過(guò)程中,對(duì)數(shù)據(jù)排序是很常見(jiàn)的場(chǎng)景。一般來(lái)說(shuō),我們可以采用兩種方式:

        1. 借助存儲(chǔ)系統(tǒng)(SQL、NoSQL、NewSQL 都支持)的排序功能,查詢的結(jié)果即是排好序的結(jié)果
        2. 查詢結(jié)果為無(wú)序數(shù)據(jù),在內(nèi)存中排序。

        今天要說(shuō)的是第二種排序方式,在內(nèi)存中實(shí)現(xiàn)數(shù)據(jù)排序。

        首先,我們定義一個(gè)基礎(chǔ)類,后面我們將根據(jù)這個(gè)基礎(chǔ)類演示如何在內(nèi)存中排序。

        @Data
        @NoArgsConstructor
        @AllArgsConstructor
        public?class?Student?{
        ????private?String?name;
        ????private?int?age;

        ????@Override
        ????public?boolean?equals(Object?o)?{
        ????????if?(this?==?o)?{
        ????????????return?true;
        ????????}
        ????????if?(o?==?null?||?getClass()?!=?o.getClass())?{
        ????????????return?false;
        ????????}
        ????????Student?student?=?(Student)?o;
        ????????return?age?==?student.age?&&?Objects.equals(name,?student.name);
        ????}

        ????@Override
        ????public?int?hashCode()?{
        ????????return?Objects.hash(name,?age);
        ????}
        }

        基于Comparator排序

        在 Java8 之前,我們都是通過(guò)實(shí)現(xiàn)Comparator接口完成排序,比如:

        new?Comparator()?{
        ????@Override
        ????public?int?compare(Student?h1,?Student?h2)?{
        ????????return?h1.getName().compareTo(h2.getName());
        ????}
        };

        這里展示的是匿名內(nèi)部類的定義,如果是通用的對(duì)比邏輯,可以直接定義一個(gè)實(shí)現(xiàn)類。使用起來(lái)也比較簡(jiǎn)單,如下就是應(yīng)用:

        @Test
        void?baseSortedOrigin()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????Collections.sort(students,?new?Comparator()?{
        ????????@Override
        ????????public?int?compare(Student?h1,?Student?h2)?{
        ????????????return?h1.getName().compareTo(h2.getName());
        ????????}
        ????});
        ????Assertions.assertEquals(students.get(0),?new?Student("Jerry",?12));
        }

        這里使用了 Junit5 實(shí)現(xiàn)單元測(cè)試,用來(lái)驗(yàn)證邏輯非常適合。

        因?yàn)槎x的Comparator是使用name字段排序,在 Java 中,String類型的排序是通過(guò)單字符的 ASCII 碼順序判斷的,J排在T的前面,所以Jerry排在第一個(gè)。


        使用 Lambda 表達(dá)式替換Comparator匿名內(nèi)部類

        使用過(guò) Java8 的 Lamdba 的應(yīng)該知道,匿名內(nèi)部類可以簡(jiǎn)化為 Lambda 表達(dá)式為:

        Collections.sort(students,?(Student?h1,?Student?h2)?->?h1.getName().compareTo(h2.getName()));

        在 Java8 中,List類中增加了sort方法,所以Collections.sort可以直接替換為:

        students.sort((Student?h1,?Student?h2)?->?h1.getName().compareTo(h2.getName()));

        根據(jù) Java8 中 Lambda 的類型推斷,我們可以將指定的Student類型簡(jiǎn)寫(xiě):

        students.sort((h1,?h2)?->?h1.getName().compareTo(h2.getName()));

        至此,我們整段排序邏輯可以簡(jiǎn)化為:

        @Test
        void?baseSortedLambdaWithInferring()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????students.sort((h1,?h2)?->?h1.getName().compareTo(h2.getName()));
        ????Assertions.assertEquals(students.get(0),?new?Student("Jerry",?12));
        }

        通過(guò)靜態(tài)方法抽取公共的 Lambda 表達(dá)式

        我們可以在Student中定義一個(gè)靜態(tài)方法:

        public?static?int?compareByNameThenAge(Student?s1,?Student?s2)?{
        ????if?(s1.name.equals(s2.name))?{
        ????????return?Integer.compare(s1.age,?s2.age);
        ????}?else?{
        ????????return?s1.name.compareTo(s2.name);
        ????}
        }

        這個(gè)方法需要返回一個(gè)int類型參數(shù),在 Java8 中,我們可以在 Lambda 中使用該方法:

        @Test
        void?sortedUsingStaticMethod()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????students.sort(Student::compareByNameThenAge);
        ????Assertions.assertEquals(students.get(0),?new?Student("Jerry",?12));
        }

        借助Comparatorcomparing方法

        在 Java8 中,Comparator類新增了comparing方法,可以將傳遞的Function參數(shù)作為比較元素,比如:

        @Test
        void?sortedUsingComparator()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????students.sort(Comparator.comparing(Student::getName));
        ????Assertions.assertEquals(students.get(0),?new?Student("Jerry",?12));
        }

        多條件排序

        我們?cè)陟o態(tài)方法一節(jié)中展示了多條件排序,還可以在Comparator匿名內(nèi)部類中實(shí)現(xiàn)多條件邏輯:

        @Test
        void?sortedMultiCondition()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12),
        ????????????new?Student("Jerry",?13)
        ????);
        ????students.sort((s1,?s2)?->?{
        ????????if?(s1.getName().equals(s2.getName()))?{
        ????????????return?Integer.compare(s1.getAge(),?s2.getAge());
        ????????}?else?{
        ????????????return?s1.getName().compareTo(s2.getName());
        ????????}
        ????});
        ????Assertions.assertEquals(students.get(0),?new?Student("Jerry",?12));
        }

        從邏輯來(lái)看,多條件排序就是先判斷第一級(jí)條件,如果相等,再判斷第二級(jí)條件,依次類推。在 Java8 中可以使用comparing和一系列thenComparing表示多級(jí)條件判斷,上面的邏輯可以簡(jiǎn)化為:

        @Test
        void?sortedMultiConditionUsingComparator()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12),
        ????????????new?Student("Jerry",?13)
        ????);
        ????students.sort(Comparator.comparing(Student::getName).thenComparing(Student::getAge));
        ????Assertions.assertEquals(students.get(0),?new?Student("Jerry",?12));
        }

        這里的thenComparing方法是可以有多個(gè)的,用于表示多級(jí)條件判斷,這也是函數(shù)式編程的方便之處。

        Stream中進(jìn)行排序

        Java8 中,不但引入了 Lambda 表達(dá)式,還引入了一個(gè)全新的流式 API:Stream API,其中也有sorted方法用于流式計(jì)算時(shí)排序元素,可以傳入Comparator實(shí)現(xiàn)排序邏輯:

        @Test
        void?streamSorted()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????final?Comparator?comparator?=?(h1,?h2)?->?h1.getName().compareTo(h2.getName());
        ????final?List?sortedStudents?=?students.stream()
        ????????????.sorted(comparator)
        ????????????.collect(Collectors.toList());
        ????Assertions.assertEquals(sortedStudents.get(0),?new?Student("Jerry",?12));
        }

        同樣的,我們可以通過(guò) Lambda 簡(jiǎn)化書(shū)寫(xiě):

        @Test
        void?streamSortedUsingComparator()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????final?Comparator?comparator?=?Comparator.comparing(Student::getName);
        ????final?List?sortedStudents?=?students.stream()
        ????????????.sorted(comparator)
        ????????????.collect(Collectors.toList());
        ????Assertions.assertEquals(sortedStudents.get(0),?new?Student("Jerry",?12));
        }

        倒序排列

        調(diào)轉(zhuǎn)排序判斷

        排序就是根據(jù)compareTo方法返回的值判斷順序,如果想要倒序排列,只要將返回值取返即可:

        @Test
        void?sortedReverseUsingComparator2()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????final?Comparator?comparator?=?(h1,?h2)?->?h2.getName().compareTo(h1.getName());
        ????students.sort(comparator);
        ????Assertions.assertEquals(students.get(0),?new?Student("Tom",?10));
        }

        可以看到,正序排列的時(shí)候,我們是h1.getName().compareTo(h2.getName()),這里我們直接倒轉(zhuǎn)過(guò)來(lái),使用的是h2.getName().compareTo(h1.getName()),也就達(dá)到了取反的效果。在 Java 的Collections中定義了一個(gè)java.util.Collections.ReverseComparator內(nèi)部私有類,就是通過(guò)這種方式實(shí)現(xiàn)元素反轉(zhuǎn)。

        借助Comparatorreversed方法倒序

        在 Java8 中新增了reversed方法實(shí)現(xiàn)倒序排列,用起來(lái)也是很簡(jiǎn)單:

        @Test
        void?sortedReverseUsingComparator()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????final?Comparator?comparator?=?(h1,?h2)?->?h1.getName().compareTo(h2.getName());
        ????students.sort(comparator.reversed());
        ????Assertions.assertEquals(students.get(0),?new?Student("Tom",?10));
        }

        Comparator.comparing中定義排序反轉(zhuǎn)

        comparing方法還有一個(gè)重載方法,java.util.Comparator#comparing(java.util.function.Function, java.util.Comparator),第二個(gè)參數(shù)就可以傳入Comparator.reverseOrder(),可以實(shí)現(xiàn)倒序:

        @Test
        void?sortedUsingComparatorReverse()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????students.sort(Comparator.comparing(Student::getName,?Comparator.reverseOrder()));
        ????Assertions.assertEquals(students.get(0),?new?Student("Jerry",?12));
        }

        Stream中定義排序反轉(zhuǎn)

        Stream中的操作與直接列表排序類似,可以反轉(zhuǎn)Comparator定義,也可以使用Comparator.reverseOrder()反轉(zhuǎn)。實(shí)現(xiàn)如下:

        @Test
        void?streamReverseSorted()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????final?Comparator?comparator?=?(h1,?h2)?->?h2.getName().compareTo(h1.getName());
        ????final?List?sortedStudents?=?students.stream()
        ????????????.sorted(comparator)
        ????????????.collect(Collectors.toList());
        ????Assertions.assertEquals(sortedStudents.get(0),?new?Student("Tom",?10));
        }

        @Test
        void?streamReverseSortedUsingComparator()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student("Tom",?10),
        ????????????new?Student("Jerry",?12)
        ????);
        ????final?List?sortedStudents?=?students.stream()
        ????????????.sorted(Comparator.comparing(Student::getName,?Comparator.reverseOrder()))
        ????????????.collect(Collectors.toList());
        ????Assertions.assertEquals(sortedStudents.get(0),?new?Student("Tom",?10));
        }

        null 值的判斷

        前面的例子中都是有值元素排序,能夠覆蓋大部分場(chǎng)景,但有時(shí)候我們還是會(huì)碰到元素中存在null的情況:

        1. 列表中的元素是 null
        2. 列表中的元素參與排序條件的字段是 null

        如果還是使用前面的那些實(shí)現(xiàn),我們會(huì)碰到NullPointException異常,即 NPE,簡(jiǎn)單演示一下:

        @Test
        void?sortedNullGotNPE()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????null,
        ????????????new?Student("Snoopy",?12),
        ????????????null
        ????);
        ????Assertions.assertThrows(NullPointerException.class,
        ????????????()?->?students.sort(Comparator.comparing(Student::getName)))
        ;
        }

        所以,我們需要考慮這些場(chǎng)景。

        元素是 null 的笨拙實(shí)現(xiàn)

        最先想到的就是判空:

        @Test
        void?sortedNullNoNPE()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????null,
        ????????????new?Student("Snoopy",?12),
        ????????????null
        ????);
        ????students.sort((s1,?s2)?->?{
        ????????if?(s1?==?null)?{
        ????????????return?s2?==?null???0?:?1;
        ????????}?else?if?(s2?==?null)?{
        ????????????return?-1;
        ????????}
        ????????return?s1.getName().compareTo(s2.getName());
        ????});

        ????Assertions.assertNotNull(students.get(0));
        ????Assertions.assertNull(students.get(1));
        ????Assertions.assertNull(students.get(2));
        }

        我們可以將判空的邏輯抽取出一個(gè)Comparator,通過(guò)組合方式實(shí)現(xiàn):

        class?NullComparator<T>?implements?Comparator<T>?{
        ????private?final?Comparator?real;

        ????NullComparator(Comparatorsuper?T>?real)?{
        ????????this.real?=?(Comparator)?real;
        ????}

        ????@Override
        ????public?int?compare(T?a,?T?b)?{
        ????????if?(a?==?null)?{
        ????????????return?(b?==?null)???0?:?1;
        ????????}?else?if?(b?==?null)?{
        ????????????return?-1;
        ????????}?else?{
        ????????????return?(real?==?null)???0?:?real.compare(a,?b);
        ????????}
        ????}
        }

        在 Java8 中已經(jīng)為我們準(zhǔn)備了這個(gè)實(shí)現(xiàn)。

        使用Comparator.nullsLastComparator.nullsFirst

        使用Comparator.nullsLast實(shí)現(xiàn)null在結(jié)尾:

        @Test
        void?sortedNullLast()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????null,
        ????????????new?Student("Snoopy",?12),
        ????????????null
        ????);
        ????students.sort(Comparator.nullsLast(Comparator.comparing(Student::getName)));
        ????Assertions.assertNotNull(students.get(0));
        ????Assertions.assertNull(students.get(1));
        ????Assertions.assertNull(students.get(2));
        }

        使用Comparator.nullsFirst實(shí)現(xiàn)null在開(kāi)頭:

        @Test
        void?sortedNullFirst()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????null,
        ????????????new?Student("Snoopy",?12),
        ????????????null
        ????);
        ????students.sort(Comparator.nullsFirst(Comparator.comparing(Student::getName)));
        ????Assertions.assertNull(students.get(0));
        ????Assertions.assertNull(students.get(1));
        ????Assertions.assertNotNull(students.get(2));
        }

        是不是很簡(jiǎn)單,接下來(lái)我們看下如何實(shí)現(xiàn)排序條件的字段是 null 的邏輯。

        排序條件的字段是 null

        這個(gè)就是借助Comparator的組合了,就像是套娃實(shí)現(xiàn)了,需要使用兩次Comparator.nullsLast,這里列出實(shí)現(xiàn):

        @Test
        void?sortedNullFieldLast()?{
        ????final?List?students?=?Lists.newArrayList(
        ????????????new?Student(null,?10),
        ????????????new?Student("Snoopy",?12),
        ????????????null
        ????);
        ????final?Comparator?nullsLast?=?Comparator.nullsLast(
        ????????????Comparator.nullsLast(?//?1
        ????????????????????Comparator.comparing(
        ????????????????????????????Student::getName,
        ????????????????????????????Comparator.nullsLast(?//?2
        ????????????????????????????????????Comparator.naturalOrder()?//?3
        ????????????????????????????)
        ????????????????????)
        ????????????)
        ????);
        ????students.sort(nullsLast);
        ????Assertions.assertEquals(students.get(0),?new?Student("Snoopy",?12));
        ????Assertions.assertEquals(students.get(1),?new?Student(null,?10));
        ????Assertions.assertNull(students.get(2));
        }

        代碼邏輯如下:

        1. 代碼 1 是第一層 null-safe 邏輯,用于判斷元素是否為 null;
        2. 代碼 2 是第二層 null-safe 邏輯,用于判斷元素的條件字段是否為 null;
        3. 代碼 3 是條件Comparator,這里使用了Comparator.naturalOrder(),是因?yàn)槭褂昧?code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;color: rgb(30, 107, 184);background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;">String排序,也可以寫(xiě)為String::compareTo。如果是復(fù)雜判斷,可以定義一個(gè)更加復(fù)雜的Comparator,組合模式就是這么好用,一層不夠再套一層。

        文末總結(jié)

        本文演示了使用 Java8 中使用 Lambda 表達(dá)式實(shí)現(xiàn)各種排序邏輯,新增的語(yǔ)法糖真香。

        程序汪資料鏈接

        程序汪接的7個(gè)私活都在這里,經(jīng)驗(yàn)整理

        Java項(xiàng)目分享 最新整理全集,找項(xiàng)目不累啦 06版

        堪稱神級(jí)的Spring Boot手冊(cè),從基礎(chǔ)入門(mén)到實(shí)戰(zhàn)進(jìn)階

        臥槽!字節(jié)跳動(dòng)《算法中文手冊(cè)》火了,完整版 PDF 開(kāi)放下載!

        臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開(kāi)放下載!

        字節(jié)跳動(dòng)總結(jié)的設(shè)計(jì)模式 PDF 火了,完整版開(kāi)放下載!


        歡迎添加程序汪個(gè)人微信 itwang009? 進(jìn)粉絲群或圍觀朋友圈

        瀏覽 48
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)

        感谢您访问我们的网站,您可能还对以下资源感兴趣:

        国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日本乱伦网| 重庆美女揉BBBB搡BBBB| 青草超碰| 91av一区二区三区| 亚洲AV无码成人精品区东京热| 一本一道久久a久久精品蜜桃| а天堂中文在线资源| 99re国产视频| 亚洲天堂高清无码| 小佟丽娅大战91哥| 一区二区三区亚洲| 在线免费看a| 一本一本久久a久久精品牛牛影视| 成年人免费公开视频| 2014亚洲天堂| 人妻少妇精品视频| 欧美日韩在线免费| 国产麻豆精品成人毛片| 亚洲vs无码秘蜜桃| 亚洲国产精品尤物yw在线观看 | 久久婷婷视频| AV三级片在线观看| 成人久久网| 在线免费观看a| 欧美一级高清片免费一级a| 精品少妇3p| www.天天干| 69人妻人人澡人人爽人人精品| 日韩不卡在线观看| 久久9视频| 米奇色色色| 黄片Av| 大香蕉av在线| 久久精品三级片| 热久久中文字幕| 天堂网在线观看| 国产剧情一区二区三区| 天天夜夜久久| 52妺嘿嘿午夜福利在线| 狠狠色一区| 国产欧美在线| 三级在线视频| 91露脸熟女四川熟女在线观看 | 亚洲自拍电影| 18久久| 夜夜操夜夜骑| 久久精品五月天| 黄91在线观看| 夜夜嗨AV一区二区三区啊| 加勒比无码人妻| 久久久影院| 亚洲h| 午夜不卡视频| 午夜成人网站| 男人亚洲天堂| 三级片高清无码| 中文字幕亚洲第一| 亚洲第一成年人网站| 亚洲最新在线观看| 中文字幕网站在线观看| 亚洲色在线视频| 男女日皮视频| 影音先锋成人网| 亚洲天堂无码在线观看| 黄色激情视频网站| 人妻操逼| 羞羞视频com.入口| 视频一区18| 大香蕉免费在线观看| 国产亚洲精品久久久久久桃色| 一区二区三区四区成人| 97爱爱视频| 青娱在线视频| 午夜亚洲福利视频| 日韩av三级在线观看| 伊人黄色| 亚洲欧美成人在线| 一区二区三区视频在线观看| 东北嫖老熟女一区二区视频网站| 999久久久| 激情视频在线免费观看| 中文字幕第315页| 911国产精品| 一级二级三级视频| 欧美熟妇BBB搡BBB| 在线观看成人18| 久草在| 日韩一区二区高清无码| 午夜丁香婷婷| chinese高潮老女人| 1204手机看片| 久久蜜桃成人| 国产黄色一级电影| 97精品人妻一区二区三区香蕉农| 亚洲天堂高清无码| 久久婷婷热| 91在线无码精品秘软件| 羞羞AV| AV在线播放中文字幕| 亚洲无吗在线视频| 久久久久久无码视频| 91麻豆福利在线观看| 怡红影院美乳| 亚洲色播放| 欧美footjob高跟脚交| np高辣调教视频| 亚洲精品一区二区二区的游戏情况| 日日干干| 91成人片| 欧美视频免费操逼图。| 一级黄色蜜芽视频| 中日美朝美女一级片免费看| 午夜精品18码视频国产17c| 九鼎联盟骗子| 亚洲影院中文字幕| 无码日韩av| 国产精品久久久久国产A级 | 自拍欧美亚洲| 97人妻一区二区精品视频| 亚洲三级电影在线观看| 久久精品观看| 安徽妇搡BBBB搡BBBB按摩| 一本无码高清| 在线免费看黄网站| 欧美色图综合| 无码一区二区在线观看| 丰满人妻精品一区二区在线| 欧美中文在线观看| 中文字幕在线观| 波多野吉衣毛片| 亚洲视频综合| 加勒比久久综合| 亚洲一区二区无码| sesese| 色色加勒比综合| 99成人乱码一区二区三区在线| 大香伊人蕉| 亚洲美女网站在线观看| 成年人免费看视频| 特级西西444www大胆高清图片| 人人摸人人看人人| 日本人妻在线观看| 精品成人在线视频| 欧美后门菊门交3p| 色鬼综合| 欧美成人三级在线观看| 五月丁香综合激情| 波多野结衣网址| 成人自拍视频| www,操逼| 日韩三级视频在线观看| 操逼激情视频| 亚洲vs无码秘蜜桃| 免费观看操逼| 视色影院| 日产毛片| 亚洲综合激情| 亚洲中文字幕av| 亚洲免费精品视频| 中文字幕天堂网| 成人黄色一级A片| 欧美午夜影院| 筱田步美| 欧美日韩精品在线视频| 天天撸天天干| 欧美日韩精品在线| 欧洲精品码一区二区三区免费看| 国产嫩草久久久一二三久久免费观看| 国产伊人自拍| 亚洲天堂在线免费观看视频| 黄色一级片在线| 一区二区三区观看| 午夜精品久久久| 人人爽夜夜爽| 人人妻人人干| H版视频| 国产久久精品视频| 91精品少妇高潮一区二区三区不卡| 蜜臀久久精品久久久久| 在线观看国产小视频| 一道本视频| 羽月希无码| 夜夜骑夜夜操| 小日本91在线观看| 欧美啪啪视频| 最近中文字幕在线观看| 91日韩在线| 福利视频网亚洲| 中文字幕高清视频| 日韩在线二区| 91首页| 91精品国产三级| 国内自拍视频在线观看| 久热99| 丰满无码| 真人一级片| AV婷婷五月天| 国产在线无码视频| 日本黄色电影网址| 大香蕉大香蕉大香蕉| 99在线观看视频在线高清| 国产aaaaaaaaaa| 色老板在线免费观看| 久久99精品久久久水蜜桃| 亚洲特黄| 波多野结衣vs黑人巨大| 男人的天堂视频在线| 综合激情AV| 亚洲专区在线| 中文字幕在线观看亚洲| 日韩图片区小说视频区日| 无码精品一区二区免费| 亚洲无码精品专区| 97精品国产97久久久久久免费| 亚洲一级内射| 精品无套| 天天艹天天| 人人天天操| 99re在线视频观看| 操逼在线观看| 日韩AV无码专区亚洲AV紧身裤 | av高清无码| 操b免费| 色婷婷色婷婷| 丁香五月婷婷五月天| 91色婷婷综合久久中文字幕二区| 大香蕉国产| 亚洲久爱| 国内自拍偷拍视频| 欧美夜夜爽| 无码高清在线播放| 东京亚洲无码| 亚洲操逼电影| 欧美一级黃色A片免费看小优视频| 日本不卡二区| 国产精品亚洲一区| 一本加勒比HEZYO东京热无码 | 国产黄色视屏| 爆乳一区二区| 青青草资源站| 麻豆午夜福利视频| 婷婷五月无码| 91丨九色丨熟女老版| 九九九成人视频| 2021天天夜日| 亚洲Av无码成人专区擼| 亚洲精品秘一区二区三线观看| 精品黄色毛片| 天天操欧美| 婷婷五月综合在线| 肏逼网站| 国产a片视频| 啪啪啪免费视频| 免费一级做a爱片毛片A片小说| 中文午夜福利| 日韩中文字幕视频在线| 久操不卡| av麻豆| 中文字幕特黄A片| 欧美二区三区| 婷婷五月综合网| 四虎激情影院| 另类性爱视频| 国产成人av网站| 蜜桃av.38| 波多野吉衣av| av天堂中文在线| 久久精品一区二区| 免看一级a一片| 亚洲性爱小说| 中文字幕视频在线| 国产搡BBB爽爽爽视频| 91成人视频在线免费观看| 婷婷五月天亚洲| 国外成人在线视频老鸭窝| 100国产精品人妻无码| 四虎精品成人无码A片| 色就是色欧美| 日韩一本道在线| 国产精品成人影视| 黄色片免费看| 国产久久性爱| 日韩成人精品视频| 国产中文字幕片| 亚洲第一黄色视频| 人妖毛片| 午夜探花视频| 一区二区三区精品无码| 高清免费无码视频| 久久精品国产AV一区二区三区 | 91精品导航| 美女黄色视频永费在线观看网站| 国产黄色自拍| 啊啊啊网站| 欧美性BBwBBwBBwHD| 免费无码在线视频| 日韩一级欧美一级| 丰满的人妻一区二区10| 91丝袜一区在线观看| 人妻少妇精品视频| 五月婷婷视频在线观看| 亚洲老鸭窝| 黄色特级aaa片| 免费无码婬片AAAA片在线蜜芽 | 国产精品主播| 黄色视频在线观看亚洲一区二区三区免费| 人人摸在线视频| 亚洲视频中文| 丰满人妻一区二区三区Av猛交| 欧美一区三区| 日韩成人视频在线观看| 欧美一级高清片免费一级a| 国产色综合视频| 蜜桃精品一区二区三区美女| 亚洲一级黄色大片| 国产日皮视频| 91视频大全| 国产Av高清| 久久久久久久久久久久久自慰小片| 5D肉蒲团| 日本亚洲欧美| 国产suv精品一区二区6精华液| 91免费在线看| 免费在线观看中文字幕| 99热这里只有精品7| 操逼动漫| 亚洲不卡一区二区三区| 久久99精品久久久水蜜桃| 可以免费观看的AV| 国产91精品久久久天天| 一区二区三区在线播放| 无码国产精品一区二区视频| 51妺嘿嘿午夜福利| 亚洲av高清| 人人上人人干| 做爱视频毛片人乱| 这里只有精品在线观看| 久久久桃色| 99精品视频16在线免费观看| 五月丁香色婷婷| 成人日韩AV| 九九九久久久| 日韩AV资源网| 欧美大香蕉在线视频| 操逼视频国产91| 自拍做爱视频| 四虎无码丰满人妻| 国产美女一级真毛片酒店| 欧美成人精品无码| 国产成人无码一区二区在线观看| 国产高清一区| 麻豆一区在线| 欧美老女人操逼| 欧美色色综合| 日韩一级欧美一级| 天天A片| 成人H动漫精品一区二区三区蘑菇| 91人人妻人人做人人爽| 国产成人无码一区二区| 麻豆精品一区二区三区| 色综合天天综合网国产成人网| 久久99久久视频| 国产一级A| 久久黄色免费看| 国产精品久久久久无码| 麻豆免费版在线观看| 色天使视频| 日本久久久久久久久视频在线观看 | 国产精品无码专区AV免费播放| 国产一级a毛一级a毛片视频黑人| 久久精品视频网站| 天天操嫩逼无套视频| 日韩区一中文字幕a∨| 黄片网站在线观看| 欧美亚洲成人视频| 爆操约了良家| 亚洲综合干| 免费的黄色录像| 亚洲国产精品成人综合| 久久久999精品视频| h国产在线| 九九性视频| 强开小嫩苞一区二区电影| 俺也去电影| 激情五月天网址| 西西午夜视频| 亚洲视频国产| 免费观看A级毛片| 成人毛片在线观看| 手机在线操B视频| 成人自拍偷拍视频| 欧美日韩一区视频| 国产一级黄片| 一级性爽A√毛片| 国产人妻人伦精品一区| 免费A片观看| 一本色道久久综合狠狠躁| 丁香五月天网站| 探花在线| 久久爆乳一区二区三区| 国产成人主播| 欧美日韩三级| 福利国产在线| av在线资源网站| 亚洲一区在线免费观看| 亚洲中文字幕第一| 狠狠干狠狠撸| 国产精品久久久久无码AV| 久久中文网| 在线观看内射视频| 中文字幕免费AV| 欧美又大又粗| 香蕉成人网站在线观看| 日韩人妻无码一区二区| 成人午夜啪免费视频在线观看软件| 人人精品| 超碰人人网| 蝌蚪窝在线免费观看视频| 久肏| 欧美最猛黑A片黑人猛交蜜桃视频| 日本黄色视频免费观看| 人人天天爽| 中文字幕免费在线看一区七区| 青娱乐最新官网| 欧美成人乱码一区二区三区| 特极西西444WWW大胆无码| 亚洲成人资源| 日韩无码免费| 翔田千里無碼破解| 亚洲国产精品18久久久久久| AAA免费视频| 国产精品美女在线观看| 中文午夜福利| 国产激情啪啪| 色婷婷综合视频| 91日韩| 国产无码AV在线| 在线观看免费视频无码| 人人妻人人爽人人澡人人精品 | 国产精品在线免费| 久久久黄色| 婷婷久久综合久| 亚洲AV无码成人精品区东京热| 99re在线观看视频| 九九五月天| 免费看日P视频| 黄色一级在线观看| 久久AV无码| 亚洲三级无码| 日韩性做爰免费A片AA片| 欧美午夜精品久久久久免费视| 日韩一级特黄A片免费观| 黄色午夜| 久久久久久一| 操逼视频免费在线观看| 国产午夜精品一区二区三区牛牛| 最新AV在线播放| 人妻无码电影推荐| 另类欧美| 国产精品国内自产拍| 男人天堂2024| 亚洲人成人无码.www粉色| 黄工厂精品视频在线播| 久久这里只有精品99| 九九内射| 青青草东路热vv| 小黄片免费在线观看| 九色91PORNY国产| 久久久久久久久久久久久自慰小片| 国产精品国产三级国产专业不| 在线观看国产一级片| 久久草| 粉嫩av懂色av蜜臀av分享| 在线观看小视频| 午夜撸一撸| 免费无码毛片| 91porn在线观看| 亚洲天堂av在线免费观看| 色播五月婷婷| 西西特级WWW444无码| 日韩性无码| 暖暖爱视频免费| 欧美一级AA大片免费看视频| 久久草视频在线播放| 亚洲天堂在线免费观看| 在线观看免费国产| 97成人精品| 无码迷穴| 操逼五月天| 亚洲一区二区三区在线播放| 99在线精品视频在线观看| 亚洲网站在线| 国产精品揄拍500视频| 日韩黄色免费网站| 日韩黄片| 一区高清无码| 亚洲成人在线网| 精品交换一区二区三区无码| 99国产精品99久久久久久| 色综合天天综合网国产成人网| 高清无码不卡视频| 成人在线91| 欧美久久久久| 日韩精品一区二区在线观看| av无码av天天av天天爽| 欧洲成人在线播放| 亚洲欧美一区二区三区在线| 欧美自拍视频在线| 97超碰自拍| 大色欧美综合| 亚洲免费高清视频| 狠狠躁日日躁夜夜躁A片小说免费 色综合久久久无码中文字幕999 | 国产在线无码视频| 嫩小槡BBBB槡BBBB槡免费-百度| 亚洲另类av| 欧美日本国产| 黄色伊人网| 天干夜天干天天天爽视频| 免费无码婬片AAAAA片| 亚洲在线视频| 色婷婷一区二区| 9l视频自拍蝌蚪9l成人| 伊人大香蕉婷婷| 精品无码免费看专区| 水果派AV| 男女日逼网站| 日韩日韩日韩| 99热在线观看精品| 午夜大香蕉| 一区二区高清视频| 狠狠插视频| 美女国产精品| 麻豆国产成人AV一区二区三区 | 亚洲vs无码蜜桃少妇| 青青青在线视频| 91人人妻人人澡人人爽| 97视频国产| 狼友在线播放| 青草五月天| 国产无码电影| 狠狠撸狠狠操| 亚洲综合在线观看视频| 日韩在线99| 中字无码AV| 操逼在线观看| 国产在线拍揄自揄拍无码福利 | 中文字幕精品一区| www天天日| 成人国产精品免费观看| 逼特逼在线观看| 国产精品无码成人AV在线播放| 日韩福利网| 国产一道本| 亚洲少妇网| A亚洲天堂| 欧美三级视频在线观看| 少妇高潮无码| 欧美日韩不卡视频| 亚洲国产精品精JIZZ老师| 久久人人做| 中文有码| 亚洲精品a| 一区二区成人电影| 中文字幕日本精品5| 九九内射| 先锋资源男人站| 日韩中字无码黄片| 嫩草视频在线观看| 影音先锋日韩资源| 欧美黄色免费网站| 一级日逼视频| 色色综合热| 日本久久不卡| 综合影院| 天堂一区二区| 暗呦网一区二区三区| 无码精品久久| 狼人综合在线| 久久精品波多野结衣| 亚洲国产精品成人综合色在线婷婷 | 精品国产AV色一区二区深夜久久| a片在线电影网| 青娱乐精品视频| 最近最好的2019中文| 久久99嫩草熟妇人妻蜜臀| 北条麻纪无码视频| 另类性爱视频| 苍井空视频| 99精品一区二区三区| 欧美成人黄色小视频| 99国产在线| 首页-91n| 四虎一区二区| 精品国产欧美一区二区三区成人| 777777国产7777777| 天天操夜夜干| 中文免费高清在线| 婷婷乱伦| 丁香婷婷五月综合影院| 永井玛丽亚av无码中出流出| 亚洲精品一区二区三区| 一区二区三区无码在线| 国产女人18毛片水真多1| a片视频网站| 激情无码一区二区三区| 99热精品免费观看| 久草网在线观看| 精品国产午夜福利| 人妻无码91| 国产精品视频一区二区三| 大香蕉久| 四川少妇搡bbbbb搡多人| 中文AV在线播放| 台湾成人视频| 99高清无码| 91色秘乱码一区二区| 老湿机福利院| 亚洲黄色一级电影| 国产精品久久在线| 免费无码婬片AAAAA片| 亚洲视频1区| 一级片黑人| 一本一道vs波多野结衣| 亚洲无码在线播放| 国产操B视频| 伊人网综合| 欧美、日韩、中文、制服、人妻| 日韩AV高清| 日本爱爱小视频| 色婷婷日韩精品一区二区三区 | 久久精品一区二区三区不卡牛牛| 在线视频污| 懂色AV成人| 精品精品精品| 日韩精品无码一区二区三区| 天天色天天色| 91精品国产综合久久久蜜臀粉嫩 | 日本成人中文字幕在线观看 | 最新中文字幕无码| 69精品免费视频| 成人黄色一级| 欧美偷拍一区二区| 久久久999精品视频| 成人小视频十八禁免费观看| 懂色av粉嫩AV蜜臀AV| 超碰91在线| 欧洲精品码一区二区三区免费看| 成人亚洲| 欧美福利导航| 国产激情AV| 在线播放你懂的| 亚洲最大黄色| 8050午夜网| 欧美亚韩一区二区三区| 爱操视频| 无码三级在线观看| 免费性爱视频网站| 亚洲高清在线播放| 热99| 日韩AV无码电影| 内射免费看| 久久系列| www黄色视频| 俺去俺来也www色视频| 国产乱伦免费| 成人黄色免费| 午夜福利成人| 大香蕉久久视频| 大香蕉尹人| 91av在线播放| 91精品综合久久久久久五月丁香| 亚洲日色| 蜜桃av.38| 国产激倩都市一区二区三区欧美 | 亚洲激情在线| 伊人网站| 麻豆免费福利视频| 国产欧美综合在线三区| 久久99影院| 四虎影库男人天堂| 日韩日日操| 亚洲天堂视频网| 五月天深爱激情网| 蜜臀久久99精品久久久久久宅男| 操逼网123首页| 激情小视频在线观看| xxxx色| 精品视频网站| 国产一级片电影| 欧美成年人网站| 黄色无遮挡| 五月婷婷综合在线| aa久久| 无码人妻精品一区二区三千菊电影| 国产精品成人无码| 黄色视频视频| 女人久久| 插菊花综合网1| 五月天婷婷乱伦| 五月丁香综合久久| 性欧美V| 精品少妇无码视频| 人妻丰满熟妇av无码| 99热播在线| 性久久久久久久久久| 欧美久久大香蕉| 逼特逼视频在线| 亚洲字幕无码| 日韩成人一区二区三区| 欧美国产精品一二三产品在哪买 | 欧美AAAAAA| 免费在线观看毛片| 国产色视频| 人人操人人| 天天舔| 91在线无码视频| 先锋影音男人资源站| 中文字幕日本| 亚洲大片在线观看| 人人妻人人插| 综合色婷婷| 青青草激情视频| 99热18| 亚洲成人自拍| 北条麻妃无码精品AV怎么看| 中国最大成人网站| 国产3p露脸普通话对白| 日本成人一区二区| 亚洲第一综合| 日韩无码字幕| 欧美特黄AAAAAAAAA片| 婷婷五月精品中文字幕| 中文字幕无码av| 人妻电影亚洲av| 国际精品久久久| 8x8拨牐拨牐拨牐永久免费| 天堂a在线8| 天天躁夜夜躁狠狠躁AV| 囯产精品久久久久久久久久辛辛| 97人妻一区二区三区| 超碰成人免费| 18禁黄网站| 成人精品A片免费网站| 99插插插| 成人午夜天堂| 在线播放内射| 国产女人18毛片水真多1| 97久久久| 亚洲日韩在线播放| 欧美爱| 丁香操逼| 88无码| 日韩AV一二三| 嫩小槡BBBB槡BBBB槡漫画| 欧美精产国品一二三产品在哪买| 日韩gay| 靠逼国产| 草逼123| 狠狠干狠狠爱| 亚洲电影av| 91色色色| 日韩人妻无码一区二区三区七区| 亚洲一级婬片A片AAAA网址| 天天爽夜夜爽夜夜爽| 翔田千里91| 在线天堂AV| 这里都是精品| 亚洲字幕在线播放| 在线免费亚洲视频| 亚洲免费AV在线| 国产无遮挡又黄又爽又色| 你懂的在线观看视频| 黑人无码视频| 在线免费看AV片| 97精品人妻一区二区三区香蕉农| 91麻豆一区| A片在线观看免费| 亚洲性爱自拍| 蜜桃秘一二三区最新| 黄片www.| 国产精品久久久久久婷婷天堂| 开心色情| 偷拍视频网站| 激情婷婷 | 学生妹内射| 久久不射| 成人影片在线观看网站18| 亚洲免费精品视频| 国产精品无码不卡| 成人性爱在线视频| 成人看片黄a免费看视频| 在线成人网站| 亚洲国产成人va| 少妇做爱特级AAA| 国产一片黑夜内射| Av大香蕉| 一插菊花综合网| 丰满的人妻一区二区10| 午夜久久视频| 2025av天堂| AV在线免费播放| 18禁网站在线看| 国产黄片一区二区三区| 久久超碰精品| 东方AV在线观看| 影音先锋中文字幕资源| 操B国产| 亚洲天堂精品在线| 日韩有码第一页| 小日本91在线观看| 国产suv精品一区二区6精华液| 天天无码视频| 午夜激情视频网站| 亚洲无码天堂| 久久久久久免费一级A片| 午夜天堂在线观看| 二区三区在线| 伊人97| 91精品91久久久中77777 | 91综合视频在线播放| 五月天成人网址| www.91爱爱,com| 欧美操逼免费视频| 在线观看精品视频| 日本三区| 亚洲精品影院| 免费黄色小视频在线观看| 无码色| 亚洲精品成人在线| 日韩群交| 亚洲国产精品尤物yw在线观看 | 亚洲国产成人在线视频| 韩日无码视频| 无码视频在线| 人人爱久久| 天天爽天天爽成人A片影院| 日本无码在线播放| 老湿机91| 精品无码蜜桃| 亚洲精品一区二区三| 人妻无码久久精品人妻成人| 人人摸人人摸人人| 围产精品久久久久久久| 日日干天天操| 黄色成人视频网站在线观看| 成人无码精品亚洲| 色综合久| 国产乱伦不卡| 亚洲免费大片| 一级特黄AA片| 欧美操操操| 免费观看A级毛片| 久久精品视| 大香蕉精品在线| 婷婷综合av| 国产精品揄拍500视频| 无码一区二区三区免费| 天天操天天射天天爽| 乱子伦毛片国产| 亚洲毛片在线观看| 婷婷成人五月天| 麻豆视频一区二区三区| 日产毛片| 中文字幕日韩一| 日韩免费AV电影| 三级a片| 北条麻妃在线播放一区| 性欧美欧美巨大69| 亚洲无码99| 国产激情免费| 成人在线中文| 大色网小色网| 91色视频在线观看| 国产Av影视| 97在线免费视频| AV无码资源| 日韩av高清| 成人a毛片| 久久艹综合网| 青青草社区| 伊人网大香蕉| 国产乱色精品成人免费视频| 国产精品免费一区二区三区都可以| 狠狠狠狠狠| 国产一区二区波多野结衣| 91午夜视频| 久久丁香五月婷婷五月天激情视频 | 中国老少配BBwBBwBBW| 亚洲区在线| 青娱乐亚洲| 97资源在线视频| 国产成人大片| 四虎国产精品成人久久| 欧美福利在线观看| 午夜成人毛片| AV在线播放中文字幕| 高清无码网址| 无码日韩精品一区二区免费96 | a免费在线观看| 国产强伦轩免费视频在线|