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

顶级网黄在线播放| 亚洲一二区视频| 久久99精品国产自在现线| 亚洲国产另类av| 欧美精品亚洲精品| 亚洲天堂777| 国产一区美女| 亚洲人成欧美中文字幕| 亚洲一区二区在线视频观看| 性直播体位视频在线观看| 成人v精品蜜桃久久一区| 欧美亚洲第一区| 日本伦理一区二区三区| 精品伊人久久久| 欧美日韩一区二区欧美激情| 波多野结衣av一区二区全免费观看| 国产黄色美女视频| 久久久久久久高潮| 久久在线免费观看视频| 熟女丰满老熟女熟妇| 欧美123区| 亚洲国产日韩综合久久精品| 视频一区二区精品| 欧美一级在线免费观看| 久久精品99国产精品日本| 久久久久久久久久久免费精品| 极品蜜桃臀肥臀-x88av| 国产精品一区二区三区美女| 欧美疯狂性受xxxxx喷水图片| 成年人视频观看| 成年人黄视频在线观看| 久久精品综合网| 国产区二精品视| 国产精品人人妻人人爽| 秋霞电影一区二区| 国产91精品久久久久| 久草资源在线视频| 三区四区不卡| 亚洲欧洲一区二区三区在线观看| 一级黄色免费视频| 99久久久国产| 欧美日韩在线观看一区二区| aⅴ在线免费观看| bl在线肉h视频大尺度| 国产精品久久福利| 少妇精品久久久久久久久久| 欧美巨乳在线| 99r精品视频| 国产一区二区不卡视频在线观看| hs视频在线观看| 狠狠色丁香婷综合久久| 国产日韩欧美综合| 中文字幕 视频一区| 日韩国产欧美三级| 欧美亚洲国产成人精品| 日韩精品――中文字幕| 亚洲激情社区| 97超碰蝌蚪网人人做人人爽| 久久精品视频日本| 在线成人www免费观看视频| 欧美激情免费视频| 欧美成人精品欧美一级| 欧美日韩中文| 国内精品400部情侣激情| 精品99在线观看| 亚洲天堂久久| 性欧美暴力猛交69hd| 五月天婷婷综合网| 亚洲欧美网站| 国产成人精品亚洲精品| 五月激情丁香网| 久久91精品久久久久久秒播| 亚洲一区二区三区视频| 精品国产亚洲AV| 成人午夜免费电影| 噜噜噜噜噜久久久久久91| 免费黄网站在线观看| 国产日韩欧美在线一区| 一区二区三区四区五区视频| 国产欧美黑人| 亚洲二区视频在线| avav在线看| 不卡亚洲精品| 日韩一区二区视频在线观看| 性感美女一区二区三区| 日韩成人av在线资源| 最近2019中文字幕第三页视频| 四虎地址8848| 一本综合久久| 国产精品青草久久久久福利99| 国产一区二区三区四区视频| 成人午夜在线免费| 日韩三级电影网站| 1区2区在线观看| 欧美日韩免费一区| 国产3p在线播放| 成人午夜网址| 日韩在线视频国产| 日本视频免费在线| 老司机午夜精品99久久| 国产精品视频免费一区| 成人激情电影在线看| 亚洲精品v日韩精品| 粉嫩虎白女毛片人体| 精品中文视频| 国产亚洲一区精品| 欧美日韩精品在线观看视频 | 在线观看国产精品日韩av| 九九精品在线观看视频| 男人操女人的视频在线观看欧美| 国产v亚洲v天堂无码| 在线看黄色av| 欧美日韩一区二区在线播放| 久久久久亚洲av无码麻豆| 久久av中文| 国语自产精品视频在线看| 最新国产中文字幕| 91在线免费视频观看| 中文字幕乱码免费| 99精品国自产在线| 国产视频久久久久久久| 欧美人妻精品一区二区免费看| 日韩av电影天堂| 九九99久久| 欧美大片黄色| 91精品国产麻豆| 国产第一页精品| 久久中文欧美| 狼狼综合久久久久综合网| 国产深夜视频在线观看| 欧美精品一二三| 久久精品色妇熟妇丰满人妻| 美女诱惑一区| 免费精品视频一区| 僵尸再翻生在线观看| 精品国产sm最大网站| 久久高清无码视频| 国产成人av在线影院| 在线观看精品视频| 久久精品xxxxx| 在线播放国产一区二区三区| 亚洲国产成人无码av在线| av中文字幕在线不卡| 午夜免费福利小电影| www.亚洲一二| 久久久在线免费观看| 可以免费观看的毛片| 亚洲综合丝袜美腿| 日本一本在线视频| 一区二区电影| 亚洲自拍av在线| 51xtv成人影院| 日韩欧美国产wwwww| 最近的2019中文字幕免费一页| 精产国品一二三区| 国产精品97| 国产精品天天狠天天看| 超碰免费在线| 欧美日韩五月天| 99热这里只有精品4| 黄色精品一二区| 久久精品在线免费视频| 亚洲一区二区三区免费| 欧美激情免费看| 三级视频在线| 在线观看一区不卡| 九九热久久免费视频| 久久99国产精品久久| 特级西西444| 国产一区二区三区不卡av| 97色在线播放视频| 色综合888| 欧美亚洲国产怡红院影院| 国产在视频线精品视频| 国产一区二区不卡| 国产精彩视频一区二区| 亚洲v天堂v手机在线| 国产精品老女人精品视频| 日本免费在线观看| 欧美zozo另类异族| av中文在线播放| 中文字幕av一区二区三区| 亚洲日本黄色片| 亚洲黄色av| 日本日本精品二区免费| 图片一区二区| 国模精品系列视频| av一区在线观看| 欧美大片日本大片免费观看| 亚洲AV无码成人精品区东京热| 国产精品婷婷午夜在线观看| 九色91porny| 快she精品国产999| 国产奶头好大揉着好爽视频| 国产精品qvod| 国产精品一区二区三区久久| 国产网红在线观看| 中国china体内裑精亚洲片| 国产视频手机在线观看| 精品动漫3d一区二区三区免费版| 亚洲精品99久久久久| 天堂免费在线视频| 亚洲一本大道在线| 91ts人妖另类精品系列| 99国内精品久久| 亚洲女人在线观看| 肉色丝袜一区二区| 成人免费性视频| 国产精品精品国产一区二区| 蜜桃网站成人| 国产精品毛片视频| 国产精品日韩在线播放| 国产传媒在线| 久久电影一区二区| 成人亚洲综合天堂| 日韩国产高清视频在线| www.色日本| 欧美巨大另类极品videosbest | 国产精品一区二区三区乱码| 国产99久久九九精品无码| 中文在线日韩| 亚洲精品高清视频| 一呦二呦三呦国产精品| 国产成人精品免费视频大全最热 | 51蜜桃传媒精品一区二区| 精品无人乱码一区二区三区 | 日操夜操天天操| 亚洲精品国久久99热| 亚洲不卡的av| 国产日韩欧美精品在线| 亚洲AV无码国产精品| 成人高清视频在线| xxxx国产视频| 国产在线看一区| 在线观看免费不卡av| 美女91精品| 免费成人午夜视频| 欧美视频网站| 特级西西444| 亚洲综合激情在线| 福利网在线观看| 性欧美欧美巨大69| 中文字幕一区二区三区四区五区六区| 不卡一区综合视频| 日韩中文字幕一区二区| 国产亚洲欧美日韩在线观看一区二区| 久久人人九九| 天堂99x99es久久精品免费| 精品国产二区在线| 韩国精品福利一区二区三区| 国产精品区一区二区三在线播放| 婷婷综合国产| 国产精品日韩欧美一区二区三区| 天堂精品久久久久| 国产精品美女黄网| 加勒比色老久久爱综合网| 国产区一区二区| 日韩av影院| 欧美在线视频一区二区三区| 精品国产一区二区三区久久久樱花 | 97超级碰碰碰| 成人小电影网站| 国产精品igao视频| 精品国产黄a∨片高清在线| 国产欧美一区二区三区在线 | 久久黄色网页| 91在线视频观看免费| 久久99精品久久久久久久久久久久 | 免费一级片在线观看| 亚洲成av人片在www色猫咪| 99视频在线看| 在线精品视频一区二区三四| 亚洲一区 中文字幕| 日韩免费看网站| 亚洲区小说区图片区| 中文字幕无线精品亚洲乱码一区 | 男男激情在线| 中文字幕亚洲一区二区三区五十路| 日本在线看片免费人成视1000| 欧美老女人在线视频| 麻豆免费版在线观看| 国产精品尤物福利片在线观看| 欧美日韩午夜电影网| 亚洲偷熟乱区亚洲香蕉av| 人妻无码一区二区三区| 国产精品系列在线| 中文字幕第100页| 国产精品一区二区在线观看不卡 | 91插插插插插插| 亚洲第一福利视频在线| 欧美一区二区三区网站| 欧美电影一区二区| 亚洲精品无码专区| 亚洲美女又黄又爽在线观看| www.亚洲资源| 欧美激情精品久久久| 欧美日韩美女| 成人黄色免费片| 噜噜噜狠狠夜夜躁精品仙踪林| 色爱区成人综合网| 综合天天久久| 成年人在线看片| 国产一区二区三区黄视频| 少妇户外露出[11p]| 中文av一区特黄| 日本三级小视频| 欧美精品亚洲二区| 手机看片1024日韩| 中文字幕欧美日韩在线| 爱啪啪综合导航| 国产欧美日韩视频| 青青草原在线亚洲| 精品少妇人妻av一区二区| 午夜一级久久| 麻豆精品国产传媒| 国产丝袜欧美中文另类| 国产一级aa大片毛片| 欧美午夜精品免费| 午夜18视频在线观看| 日韩视频免费大全中文字幕| 色吧亚洲日本| 国产91aaa| 国产精品黑丝在线播放 | 天堂网av2018| 欧美午夜精品久久久久久浪潮 | 欧美午夜精品久久久久免费视| 欧美在线播放| 999这里有精品| 久久久美女艺术照精彩视频福利播放| 欧美人与禽zozzo禽性配| 欧美日韩一区二区三区高清 | 国产 日韩 欧美在线| 国内精品第一页| 99久久久无码国产精品不卡| 色综合久久综合| 天堂av在线免费| 久久久久久中文| 日韩中文字幕一区二区高清99| 亚洲精品视频一二三| 日韩影院精彩在线| 人人妻人人澡人人爽人人精品| 亚洲自拍偷拍图区| 国产三级三级在线观看| xvideos亚洲| 日韩三区四区| 亚洲一区二区三区加勒比| 天堂影院一区二区| 黑人巨大精品欧美| 懂色aⅴ精品一区二区三区蜜月| 欧美 中文字幕| 欧美国产中文字幕| 在线精品自拍| 青青青青在线视频| 盗摄精品av一区二区三区| 欧美日韩精品一区二区三区视频播放| 日韩一级大片在线观看| 羞羞视频在线观看免费| 99se婷婷在线视频观看| 亚洲高清影视| 欧美一级大片免费看| 亚洲综合一区二区| 免费看国产片在线观看| 午夜精品一区二区三区在线视 | 日韩一区二区在线观看视频播放| 精产国品自在线www| 亚洲伊人第一页| 好看不卡的中文字幕| 先锋资源av在线| 色诱亚洲精品久久久久久| 番号在线播放| 国产欧美一区二区三区在线看| 99视频精品全国免费| 小日子的在线观看免费第8集| 亚洲最新视频在线观看| 午夜小视频免费| 欧美中文字幕在线视频| 欧洲激情视频| www.国产福利| 亚洲一级二级三级| 三级国产在线观看| 国产精品人成电影| 91精品国产91久久久久久密臀 | 国产精品亚洲四区在线观看| 人妻互换免费中文字幕| av电影在线观看不卡| 午夜一区二区三区四区| 久久久成人的性感天堂| 1769国产精品视频| 成人在线看视频| 成人欧美一区二区三区小说| 二区三区在线视频| 国产激情视频一区| 久久久久久久久久久妇女| 少妇被狂c下部羞羞漫画| 欧洲一区二区三区在线| 国产剧情在线| 欧美日韩一区二| 国产一区 二区 三区一级| 奇米影视第四色777| 在线亚洲午夜片av大片|