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

我們一起實戰學習Java8 Stream新特性

開發 前端
sorted方法的入參是一個比較器Comparator,這里我們直接使用Comparator.comparing方法構建一個根據價格排序的比較器,并使用reversed方法返回一個降序的比較器。最后我們使用終結方法collect(Collectors.toList())將結果收集到集合當中。

引言

大家好,我是了不起。剛剛不久Java23如期發布,但目前國內市場Java8還是占據著主導地位。今天我將模擬實際工作中的需求,帶領大家學習Java8中的Stream新特性,大家可以收藏起來以防在需要的時候找不到。

實體類聲明

@Getter
@Setter
public class ComputerDTO {
    /**
     * 計算機編號
     */
    private String computerNo;
    /**
     * 品牌
     */
    private String brand;
    /**
     * 價格
     */
    private BigDecimal price;
    /**
     * cpu核數
     */
    private Integer coreQuantity;
    /**
     * 內存GB
     */
    private Integer memory;
    /**
     * 硬盤信息,包含容量和類型,如 "500GB HDD" 或 "256GB SSD"
     */
    private String hardDisk;
    /**
     * 產地
     */
    private String place;
}

場景描述

我暫且充當一下產品經理,現在羅列出了下列需求,基本上覆蓋了日常使用Stream流的大多場景,各位小伙伴可以先行看一看有沒有思路。

經典場景

  1. 篩選出所有品牌為“abc”的電腦,并按價格降序排序。
  2. 計算所有電腦的價格總和。
  3. 找出內存最大的電腦的信息。
  4. 統計硬盤類型為SSD的電腦數量。
  5. 將所有電腦的產地轉換成一個不重復的集合。
  6. 創建一個Map,鍵為品牌,值為該品牌的電腦列表。
  7. 獲取每個品牌的平均價格。
  8. 獲取一個Map,鍵為計算機編號,值為該計算機信息。

組合應用

  1. 篩選出價格低于5000元且CPU核數大于等于4的電腦。
  2. 找出每個品牌中最貴的電腦,并返回一個包含這些電腦的列表。
  3. 統計每個品牌的電腦數量,并按數量降序排序。
  4. 找出所有品牌為“abc”且內存大于等于8GB的電腦,并按CPU核數降序排序。
  5. 統計每個品牌的平均價格,并找出平均價格最高的品牌。
  6. 創建一個Map,鍵為品牌,值為該品牌所有電腦的總價。

經典場景實戰攻克

下面我來帶大家一道一道攻克,并在這個過程中帶大家梳理一下Stream流使用過程中的一些注意事項。

我們假設需要處理的數據是一個ComputerDTO的List,如下:

List<ComputerDTO> computers=getComputers();

Stream流模型的操作很豐富,我們今天將使用到一些常用的方法,這些方法可以被分成兩種。

終結方法:返回值類型不再是Stream類型的方法,不再支持鏈式調用。如count、forEach、collect方法等。

非終結方法:返回值類型仍然是Stream類型的方法,支持鏈式調用。如map、filter、sorted方法等。

場景1

篩選出所有品牌為“abc”的電腦,并按價格降序排序。

List<ComputerDTO> abcComputers = computers.stream()
       .filter(computer -> "abc".equals(computer.getBrand()))
       .sorted(Comparator.comparing(ComputerDTO::getPrice).reversed())
       .collect(Collectors.toList());

首先我們將這個場景拆解成兩個過程,第一個過程是將列表中的所有品牌不為“abc”的電腦過濾掉,這里我們需要使用到filter方法。

filter方法的入參是含一個參數返回結果為boolean類型的函數式接口,這里我們直接使用lambda表達式實現。

需要注意的是filter方法將會保留符合表達式的數據,這里可以和集合的removeIf方法進行對比記憶,并且我們使用stream處理數據并不會改變原集合computers。

第二個過程是將過濾后的結果按照價格降序排序,這里我們使用sorted方法實現。

sorted方法的入參是一個比較器Comparator,這里我們直接使用Comparator.comparing方法構建一個根據價格排序的比較器,并使用reversed方法返回一個降序的比較器。

最后我們使用終結方法collect(Collectors.toList())將結果收集到集合當中。

場景2

計算所有電腦的價格總和。

BigDecimal totalCost = computers.stream()
       .map(ComputerDTO::getPrice)
       .reduce(BigDecimal.ZERO, BigDecimal::add);

這個場景我們需要先將集合中的ComputerDTO對象轉換為價格,因為我們需要的最終結果是一個BigDecimal類型,所以需要先使用map方法對數據進行轉換。

map方法的入參是一個Function函數式接口,下面貼出一張圖幫助大家理解map方法的作用。

圖片圖片

map方法在工作中常常被使用,例如需要根據一個實體類集合獲取一個屬性值集合,通常先使用map方法獲取屬性值,看情況需要可以使用distinct方法去重、filter過濾、sorted方法排序,最后使用collect方法收集起來。

在當前場景中我們需要計算所有電腦的價格總和,所以可以使用reduce終結方法進行匯總。

圖片圖片

場景3

找出內存最大的電腦的信息。

Optional<ComputerDTO> maxMemoryComputer = computers.stream()
       .max(Comparator.comparingInt(ComputerDTO::getMemory));

這個場景簡單粗暴,直接將待處理數據轉成流,然后使用max方法就可以解決,不過需要注意的是max方法返回的數據使用Optional包了一層。

Optional類同樣是Java8提供的,使用isPresent方法可以判斷包含值是否為null,通過get方法可以獲取包含值,如果包含值為null會拋出一個NoSuchElementException異常,所以通常搭配isPresent方法使用。

場景4

統計硬盤類型為SSD的電腦數量。

long ssdCount = computers.stream()
       .filter(computer -> computer.getHardDisk().contains("SSD"))
       .count();

這個場景使用了一個新的終結方法count,count方法用于統計流中元素個數,返回值類型為long類型。

場景5

將所有電腦的產地轉換成一個不重復的集合。

Set<String> places = computers.stream()
       .map(ComputerDTO::getPlace)
       .collect(Collectors.toSet());

這個場景在工作中常常會用到,也是上面提到的map的經典用法,只不過這里將流中數據通過collect(Collectors.toSet())收集到了Set中,利用了Set的特性進行去重,而沒有使用distinct方法進行去重。

這里引申一下,上點難度,如果這里最終需要獲取的是根據產地去重后的ComputerDTO集合呢,使用流的方式又該怎樣實現。

這是工作中另外的一個經典場景,List集合按照對象屬性去重,其實最終也是利用了Set的特性,在Set的構造函數中傳入了自定義比較器!

List<ComputerDTO> newList = computers.stream().collect(Collectors
                .collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ComputerDTO::getPlace)))
                        , ArrayList::new));

這里使用的Collectors.collectingAndThen方法只是將返回結果Set轉化為了List,核心處理就是Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ComputerDTO::getPlace)))。

場景6

創建一個Map,鍵為品牌,值為該品牌的電腦列表。

Map<String, List<ComputerDTO>> computersByBrand = computers.stream()
       .collect(Collectors.groupingBy(ComputerDTO::getBrand));

這個場景也是工作中常常會遇到的場景,對原有數據根據某一個緯度進行分組,然后不同組的數據使用不同的邏輯進行處理。Stream為這個需求也提供了專門的方法Collectors.groupingBy。

場景7

獲取每個品牌的平均價格。

Map<String, Double> averagePrices = computers.stream()
       .collect(Collectors.groupingBy(ComputerDTO::getBrand, Collectors.averagingDouble(c -> c.getPrice().doubleValue())));

這個場景是場景6的進階玩法,根據某一個緯度進行分組,分組后再對數據進行處理。

這里使用的是Collectors.groupingBy兩個參數的重載方法。

場景8

獲取一個Map,鍵為計算機編號,值為該計算機信息。

Map<String, ComputerDTO> computerInfoMap = computers.stream().collect(Collectors.toMap(ComputerDTO::getComputerNo, item -> item));

Map<String, ComputerDTO> computerInfoMap = computers.stream().collect(HashMap::new, (m, v) -> m.put(v.getComputerNo(), v), HashMap::putAll);

這個場景在工作中出現的頻率很高,通常有兩種方法去實現,其中Collectors.toMap方法有一個小坑,大家在使用時需要注意一下。

java8的Collectors.toMap的value不能為null。

如果待處理的數據中value值存在null,則會出現莫名其妙的空指針異常,所以我在工作中往往會使用第二種方式。

組合應用代碼參考

通過上面經典場景的講解,其實我們可以注意到,基本上絕大多數的應用都離不開collect方法,這個方法在流的使用中極為重要,在后續的文章中我也會為大家進一步的講解collect方法,敬請期待!

組合場景就是對經典場景中的一些常用API進行組合應用,所以就不在這里一一贅述,僅為大家提供了參考代碼。

  1. 篩選出價格低于5000元且CPU核數大于等于4的電腦。
List<ComputerDTO> affordableAndPowerful = computers.stream()
       .filter(computer -> computer.getPrice().compareTo(new BigDecimal("5000")) < 0 && computer.getCoreQuantity() >= 4)
       .collect(Collectors.toList());
  1. 找出每個品牌中最貴的電腦,并返回一個包含這些電腦的列表。
Map<String, ComputerDTO> mostExpensivePerBrand = computers.stream()
            .collect(Collectors.groupingBy(ComputerDTO::getBrand,
                    Collectors.collectingAndThen(
                            Collectors.maxBy(Comparator.comparing(ComputerDTO::getPrice)),
                            optional -> optional.orElseThrow(() -> new NoSuchElementException("No computers found for this brand"))
       )
   ));

    List<ComputerDTO> mostExpensiveComputers = new ArrayList<>(mostExpensivePerBrand.values());
  1. 統計每個品牌的電腦數量,并按數量降序排序。
Map<String, Long> brandCounts = computers.stream()
       .collect(Collectors.groupingBy(ComputerDTO::getBrand, Collectors.counting()));

   List<Map.Entry<String, Long>> sortedBrandCounts = brandCounts.entrySet().stream()
       .sorted(Map.Entry.<String, Long>comparingByValue().reversed())
       .collect(Collectors.toList());
  1. 找出所有品牌為“abc”且內存大于等于8GB的電腦,并按CPU核數降序排序。
List<ComputerDTO> abcHighMemoryComputers = computers.stream()
       .filter(computer -> "abc".equals(computer.getBrand()) && computer.getMemory() >= 8)
       .sorted(Comparator.comparingInt(ComputerDTO::getCoreQuantity).reversed())
       .collect(Collectors.toList());
  1. 統計每個品牌的平均價格,并找出平均價格最高的品牌。
Optional<Map.Entry<String, Double>> highestAveragePrice = computers.stream()
       .collect(Collectors.groupingBy(
           ComputerDTO::getBrand,
           Collectors.averagingDouble(c -> c.getPrice().doubleValue())
       ))
       .entrySet().stream()
       .max(Map.Entry.comparingByValue());

   String highestBrand = highestAveragePrice.map(Map.Entry::getKey).orElse(null);
   double highestAverage = highestAveragePrice.map(Map.Entry::getValue).orElse(0.0);
  1. 創建一個Map,鍵為品牌,值為該品牌所有電腦的總價。
Map<String, BigDecimal> totalPricesByBrand = computers.stream()
       .collect(Collectors.groupingBy(
           ComputerDTO::getBrand,
           Collectors.reducing(BigDecimal.ZERO, ComputerDTO::getPrice, BigDecimal::add)
       ));

結語

學會使用java8的Stream新特性,可以極大的減少工作中的代碼量,可以使自己的代碼看起來更整潔,同時很多框架源碼中也大量使用Stream,掌握了它也可以為我們閱讀源碼提供幫助,希望這篇文章可以給大家帶來幫助。

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2022-02-14 10:16:22

Axios接口HTTP

2021-05-19 10:37:16

WebFlux 前置工具

2022-12-09 07:48:10

Java8Stream表達式

2022-12-30 09:24:23

Java8Stream操作

2022-12-01 09:59:57

內核觀測性方法

2021-11-26 09:44:42

鏈表節點定位

2021-05-20 07:15:34

RSA-PSS算法簽名

2023-03-28 07:32:37

2023-03-26 12:45:52

Linux內核頭文件

2025-03-27 02:00:00

SPIJava接口

2022-07-29 08:17:46

Java對象內存

2023-09-29 08:58:38

2023-09-15 06:56:01

RC.NET 6Release

2021-10-11 10:25:33

排列nums數組

2021-03-18 00:04:13

C# 類型數據

2022-03-31 18:59:43

數據庫InnoDBMySQL

2023-06-30 08:18:51

敏捷開發模式

2023-08-10 08:28:46

網絡編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2022-05-24 08:21:16

數據安全API
點贊
收藏

51CTO技術棧公眾號

国内伊人久久久久久网站视频 | 久久久精品视频在线| av久久网站| 国产精品久久国产精麻豆99网站| 成人看片人aa| 久久网免费视频| 日韩aaa久久蜜桃av| 福利视频第一区| 成人性色av| 在线观看免费av片| 精品国产中文字幕第一页| 欧美综合天天夜夜久久| 中文字幕中文字幕99| 亚洲va欧美va| aa级大片欧美三级| 亚洲人成网站在线播| 欧美日韩在线观看不卡| 国产黄色免费在线观看| 激情综合色综合久久| 久久精品久久久久久| 美女网站视频黄色| 欧美aaa免费| 久久久久久久久久美女| 成人高清视频观看www| 久草视频中文在线| 欧美一二区在线观看| 欧美色综合网站| 国产高清www| 在线a人片免费观看视频| 国产成人免费高清| 国产精品久久久久久久久久| 久久久久久久久久一区二区三区| 伊人春色之综合网| 日韩一区二区三区三四区视频在线观看 | 欧美一区激情视频在线观看| 国产精品-色哟哟| 国产日韩欧美| 亚洲精品日韩在线| 国产探花在线观看视频| 黄色羞羞视频在线观看| 97se亚洲国产综合自在线观| 国产中文字幕亚洲| 欧美国产成人精品一区二区三区| 亚洲综合中文| 亚洲第一在线视频| 国内国产精品天干天干| 精品国产免费人成网站| 一区二区三区四区av| 日本欧美精品久久久| 蜜桃久久一区二区三区| 久久精品国产亚洲高清剧情介绍 | 精品成人av一区二区三区| 四虎精品在线观看| 色天天综合久久久久综合片| 91动漫在线看| 在线heyzo| 专区另类欧美日韩| 日本欧洲国产一区二区| 亚洲av电影一区| 国产sm精品调教视频网站| 国产欧亚日韩视频| 国产成人一级片| 欧美国产专区| 久久精品久久久久电影| 国产sm调教视频| 中文字幕精品影院| 亚洲精品视频在线观看视频| 午夜天堂在线视频| 天堂久久一区| 一本大道av伊人久久综合| 久久久久久久中文| 国产在线二区| 亚洲视频一区在线| 日本黄色a视频| 色网站在线看| 国产精品久久午夜| 欧美在线3区| www日本高清| 蜜臀av在线播放一区二区三区 | 国产91视觉| 国产精品无码久久av| 激情文学综合插| 91欧美日韩一区| 一级黄色a毛片| 久久99久久久欧美国产| 成人黄色短视频在线观看| 一区二区视频播放| 久久精品国产77777蜜臀| 国产精品香蕉av| 在线观看中文字幕av| 美腿丝袜在线亚洲一区| 91精品综合久久久久久五月天| 国产又粗又猛又色又| 欧美aaa在线| 成人黄色片网站| www.黄色片| 国产精品白丝jk白祙喷水网站| 亚洲已满18点击进入在线看片| 国产夫妻性生活视频| 福利电影一区二区三区| 亚洲xxxxx| 亚洲精品久久久久久久久久| 99精品视频在线观看| 日本一区视频在线观看| 99中文字幕一区| 樱花草国产18久久久久| jizzjizzxxxx| 久久久人成影片一区二区三区在哪下载| 在线免费观看日韩欧美| 污污视频网站在线| 国产精品色呦| 亚洲国产成人一区| 一级黄色片大全| 99国产精品一区二区| 欧美激情影音先锋| 91美女免费看| 极品少妇一区二区| 国产精品中文在线| 刘亦菲久久免费一区二区| 懂色av一区二区三区免费观看| 欧美日韩高清免费| 色综合久久久久综合一本到桃花网| 亚洲国产色一区| 五月婷婷深爱五月| 国产精品chinese在线观看| 一区二区欧美在线| 精品视频在线观看免费| 久久精品久久综合| 久久综合九九| 欧美亚洲天堂| 日本高清不卡一区| 久久人妻少妇嫩草av蜜桃| 欧美手机在线| 精品中文字幕乱| 中文字幕欧美人妻精品| 91色porny蝌蚪| 一区二区国产日产| 成年人国产在线观看| 欧美日韩国产123区| 第四色在线视频| 亚洲久久久久| 欧美在线影院在线视频| 99热精品在线播放| 国产精品亲子伦对白| 欧美极品欧美精品欧美图片| 91精品国产自产精品男人的天堂 | 国产精品视频一区二区三区综合| 精品久久久久久久久久久久久久久| 精品丰满少妇一区二区三区| 久久午夜影视| 精品乱子伦一区二区三区| 在线观看中文| 欧美一卡二卡在线| 小向美奈子av| 麻豆91在线观看| 日韩精品伦理第一区| 涩涩视频在线| 亚洲国模精品私拍| 国产午夜小视频| 高清日韩电视剧大全免费| 裸体裸乳免费看| 国产精品3区| 中文字幕日韩欧美在线| 国产99久久久久久免费看| 久久你懂得1024| 1024av视频| 精品少妇3p| 久久免费精品日本久久中文字幕| 成 人片 黄 色 大 片| 亚洲天堂中文字幕| 免费精品99久久国产综合精品应用| 欧美日韩激情| 国产综合视频在线观看| 国产色在线观看| 91精品国产综合久久久久久漫画| 老熟妇高潮一区二区三区| 国产一区三区三区| 一区精品视频| 欧美电影在线观看一区| 欧美日韩第一视频| 日本高清视频网站| 激情亚洲一区二区三区四区| 成人午夜剧场视频网站| 日韩精品每日更新| 一本色道久久99精品综合| 国产精品成人3p一区二区三区| 美日韩精品视频免费看| 亚洲女人18毛片水真多| 午夜精品国产更新| 一道本在线观看| 免费在线成人| 一区二区三区电影| 日韩中文字幕视频网| 97色在线观看| yjizz视频网站在线播放| 678五月天丁香亚洲综合网| 欧美三级在线免费观看| 99久久精品国产一区| 北条麻妃av高潮尖叫在线观看| 欧美aaaa视频| 粉嫩av四季av绯色av第一区| а_天堂中文在线| 亚洲男人av电影| 一级黄色a毛片| 午夜电影久久久| 日韩免费成人av| 蜜臀精品久久久久久蜜臀| 国内自拍中文字幕| 欧美一级色片| 国产这里只有精品| www.综合网.com| 在线视频日本亚洲性| 丰满熟女一区二区三区| 91黄视频在线| 久久久精品人妻一区二区三区四| 久久伊人中文字幕| 日本少妇激三级做爰在线| 午夜在线视频观看日韩17c| 一级特黄录像免费播放全99| www.国产精品一区| 国产精品久久久久免费a∨| 欧美xxxx性xxxxx高清| 亚洲天堂精品在线| 懂色av蜜臀av粉嫩av分享吧| 欧美午夜女人视频在线| 四虎884aa成人精品| 久久久久久久久久久久久女国产乱 | 色琪琪久久se色| 国产欧美日韩亚洲| 全亚洲第一av番号网站| 高清欧美性猛交xxxx黑人猛交| 国产在线自天天| 亚洲第一区第一页| www.蜜桃av.com| 欧美无人高清视频在线观看| 日韩高清精品免费观看| 亚洲欧美区自拍先锋| 日本乱子伦xxxx| av激情综合网| 国产人妖在线观看| 激情综合色综合久久综合| 久草福利视频在线| 亚洲午夜伦理| 色香蕉在线观看| 日韩成人免费| 日本午夜精品电影| 精品国产导航| 国产精品久久久久久久久久直播| 亚洲一区导航| 国产精品视频yy9099| 精品人人视频| 久久久噜噜噜久久中文字免| 1769免费视频在线观看| 久久精品小视频| 欧美性天天影视| 一本一道久久a久久精品逆3p| 三级毛片在线免费看| 亚洲精品aⅴ中文字幕乱码| 午夜精品久久久久久久99热黄桃 | 免费看欧美一级片| 91tv精品福利国产在线观看| 成人手机视频在线| 视频在线不卡免费观看| 欧日韩一区二区三区| 网红女主播少妇精品视频| 国产麻豆日韩| 97精品久久| 国产一级特黄a大片99| 久久1电影院| 麻豆久久久9性大片| 你懂的视频欧美| 欧美亚洲免费高清在线观看 | 成人性生交大片免费看小说 | 国产精品久久久久久久久久久久久久久久久久 | 欧美三根一起进三p| 亚洲线精品一区二区三区八戒| 久一视频在线观看| 欧美性极品xxxx娇小| 久草热在线观看| 欧美一区二区视频免费观看| 日本激情视频网站| 亚洲欧洲在线观看| 瑟瑟视频在线| 午夜精品福利视频| 中文字幕系列一区| 亚洲一区中文字幕| 中文有码一区| 午夜探花在线观看| 国产精品嫩草99av在线| 国内外成人免费在线视频| 成人免费视频caoporn| 一级肉体全黄裸片| 亚洲最快最全在线视频| 福利网址在线观看| 日韩精品最新网址| 国产黄在线观看免费观看不卡| 精品中文字幕在线观看| 日韩精品三区| 国产乱码精品一区二区三区不卡| 精品国产一区二区三区av片| 国产av熟女一区二区三区| 日本午夜一本久久久综合| 成人欧美精品一区二区| 中文字幕亚洲一区二区av在线| 久久精品久久国产| 欧美精品丝袜久久久中文字幕| 视频国产在线观看| 久久久精品电影| 456亚洲精品成人影院| 国产乱码精品一区二区三区中文 | 少妇av一区二区| 久久精品视频中文字幕| 日本综合视频| 裸模一区二区三区免费| 午夜精品亚洲| 欧美激情国内自拍| 中文字幕av免费专区久久| 日韩高清精品免费观看| 日韩欧美亚洲另类制服综合在线| av影片在线看| 国产成人免费av电影| 秋霞蜜臀av久久电影网免费| 欧美交换配乱吟粗大25p| 免费不卡在线观看| 男人的天堂av网| 一本大道久久精品懂色aⅴ| 天堂网在线播放| 欧美激情在线播放| 亚洲精品一区二区三区在线| 中文一区一区三区免费| 美日韩一区二区三区| 欧洲av一区二区三区| 欧美午夜xxx| 欧美美女色图| 日韩免费不卡av| 亚洲都市激情| 国产成人亚洲精品无码h在线| aaa国产一区| 国产午夜福利片| 亚洲电影在线看| 狠狠操一区二区三区| 国产有色视频色综合| 精品二区视频| 国产视频精品视频| 亚洲高清在线精品| 男人天堂综合网| 韩剧1988免费观看全集| 成人在线tv视频| 国产91xxx| 99re热这里只有精品视频| 日韩美女黄色片| 国产视频久久久久久久| 欲香欲色天天天综合和网| 久久久久久久久久久久久久一区| 欧美亚洲自偷自偷| 性高潮久久久久久久| 欧美日韩情趣电影| 黄色一级大片在线免费看产| 91在线中文字幕| 国内精品久久久久久久97牛牛| 超碰caoprom| 黄色一区二区三区| 免费观看成年人视频| 欧美性受xxx| 精品国产乱码久久久久久果冻传媒 | 狼狼综合久久久久综合网| 午夜亚洲视频| 人妻一区二区视频| 欧美日韩精品一区二区在线播放| 久操视频在线| 国产精品免费一区二区三区四区| 亚洲欧洲午夜| 日韩av片在线| 在线精品观看国产| 国产黄a三级三级三级av在线看 | 久久99精品久久久久久噜噜| 国产精品中文字幕制服诱惑| 干日本少妇首页| √…a在线天堂一区| 老牛影视av牛牛影视av| 国产精品第2页| 欧美激情91| 精品少妇一区二区三区免费观| 欧美三级欧美一级| 日本色护士高潮视频在线观看| 久久久久久久久久久久久久久久av| 欧美a级一区二区| 伊人365影院| 色综合亚洲精品激情狠狠| jazzjazz国产精品久久| 91蝌蚪视频在线观看| 一区二区三区四区不卡在线| 黄色的视频在线免费观看| 亚洲综合在线中文字幕| 久久久精品午夜少妇| 看片网站在线观看| 亚洲最新av在线| 久久成人福利| 亚洲第一天堂久久| 色哟哟亚洲精品|