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

Java8新特性,Stream入門詳解,豐富案例等你細品

開發 前端
Stream流是JDK8新增用來處理集合、數組、文件等數據,借助Lambda表達式,極大提高編程效率和程序可讀性,同時擁有串行和并行兩種數據處理模式,并行模式可以充分利用多核CPU性能,通過 fork/join 方式拆解任務加速處理。

?JDK8的重要更新除去Lambda之外還有Stream,兩者結合使用為操作和計算數據提供了極大的便利。

本篇文章并不打算長篇大論,文章過長會閱讀疲勞,Stream也并不是一兩篇文章可以介紹清楚的,本篇主要介紹Stream的簡單理論加上案例來體會一下Stream的作用,便利和魅力,后續文章會系統講解Stream體系!

Stream是什么

Stream就是【流】的意思,與 java.io包中的輸入流,輸出流是兩個不同的概念

Stream流是JDK8新增用來處理集合、數組、文件等數據,借助Lambda表達式,極大提高編程效率和程序可讀性,同時擁有串行和并行兩種數據處理模式,并行模式可以充分利用多核CPU性能,通過 fork/join 方式拆解任務加速處理。

Stream好處

  • 函數式編程:讓Java原本臃腫的代碼變的簡潔,這當然是需要配合Lambda實現
  • 高效的并行處理機制,比之前的for循環加if...else,挨個元素處理速度要快上許多
  • 具有多種數據的處理實現,比如篩選,去重,轉換,查詢,遍歷等內置操作

Stream特點

  • 流與集合、數組、文件不同,不是數據結構,不存儲數據,目的是處理數據,將處理結果返回或者轉換
  • 流在計算數據時,如果需要使用到集合中元素,會取出使用,并不修改源數據,流只使用數據一次
  • 支持延遲計算,只有等到執行終止操作時才會執行計算,可以降低不必要的CPU資源浪費

Stream操作分類

  • 創建流:可以通過集合、數組、IO資源、Stream的構造函數創建
  • 中間操作:對數據的計算操作,比如篩選,去重,轉換等操作,一個中間操作返回一個新的Stream,來支持連續計算
  • 終止操作:每個流只能有一次終止操作,終止之后流無法使用,會產生一個計算結果,可以根據需求轉換為想要的結果類型
  • 概念先不說那么多,免得云里霧里,接下來我們直接通過案例來使用Stream對集合的操作

案例:

  • 獲取運費大于5000元的運單,并放到新集合中
  • 將推薦運單按照運費從高到低排序
  • 統計最高運費,最低運費,平均運費
  • 將運單按照運費從高到低排序,相同者按照距離從高到低排序
  • 將運單按貨物類型分類,將運單按貨物類型和目的地分類,將運單按照運費是否高于5000元分為兩部分

接下來通過傳統方式和Stream兩種分別實現,對比不同

提前準備:

import java.math.BigDecimal;

public class Waybill {
// id
private Long id;
// 運單編號
private String wayNo;
// 運費
private BigDecimal price;
// 貨物類型
private String freightType;
// 距離
private BigDecimal distance;
// 目的地
private String endAddress;

public Waybill(Long id, String wayNo, BigDecimal price, String freightType, BigDecimal distance, String endAddress) {
this.id = id;
this.wayNo = wayNo;
this.price = price;
this.freightType = freightType;
this.distance = distance;
this.endAddress = endAddress;
}

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getWayNo() {
return wayNo;
}

public void setWayNo(String wayNo) {
this.wayNo = wayNo;
}

public BigDecimal getPrice() {
return price;
}

public void setPrice(BigDecimal price) {
this.price = price;
}

public String getFreightType() {
return freightType;
}

public void setFreightType(String freightType) {
this.freightType = freightType;
}

public BigDecimal getDistance() {
return distance;
}

public void setDistance(BigDecimal distance) {
this.distance = distance;
}

public String getEndAddress() {
return endAddress;
}

public void setEndAddress(String endAddress) {
this.endAddress = endAddress;
}

@Override
public String toString() {
return "Waybill{" +
"id=" + id +
", wayNo='" + wayNo + '\'' +
", price=" + price +
", freightType='" + freightType + '\'' +
", distance=" + distance +
", endAddress='" + endAddress + '\'' +
'}';
}
}

1、獲取運費大于5000元的運單,并放到新集合中

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class WaybillMain {
private static List<Waybill> waybills = new ArrayList<>();

static {
// 創建數據
waybills.add(new Waybill(1L,"Y11111111111",new BigDecimal(1000),"鋼材",new BigDecimal(200),"上海市"));
waybills.add(new Waybill(2L,"Y22222222222",new BigDecimal(2000),"鋼材",new BigDecimal(300),"鄭州市"));
waybills.add(new Waybill(3L,"Y33333333333",new BigDecimal(3000),"水泥",new BigDecimal(300),"北京市"));
waybills.add(new Waybill(4L,"Y44444444444",new BigDecimal(4000),"水泥",new BigDecimal(400),"廣州市"));
waybills.add(new Waybill(5L,"Y55555555555",new BigDecimal(5000),"沙子",new BigDecimal(500),"上海市"));
waybills.add(new Waybill(6L,"Y66666666666",new BigDecimal(6000),"板材",new BigDecimal(500),"深圳市"));
waybills.add(new Waybill(7L,"Y77777777777",new BigDecimal(7000),"蔬菜",new BigDecimal(500),"杭州市"));
}

public static void main(String[] args){
// 1、傳統寫法
// 獲取運費大于5000元的運單,并放到新集合中
List<Waybill> newWaybills = new ArrayList<Waybill>();
for (Waybill waybill : waybills) {
// 判斷價格大于5000,BigDecimal需要使用compareTo方法比較
// 1:左邊比右邊大,0:相等,-1:右邊比左邊大
if(waybill.getPrice().compareTo(new BigDecimal(5000)) == 1) {
newWaybills.add(waybill);
}
}
// 遍歷
for (Waybill newWaybill : newWaybills) {
System.out.println(newWaybill);
}
// 2、Stream + Lambda寫法
System.out.println("**華麗麗的分割線**");
// 1) 通過集合的stream()方法創建流對象
Stream<Waybill> stream = waybills.stream();
// 2) 通過流對象的方法計算數據,filter:過濾數據
// filter接收一個過濾條件,item為當前操作的元素,比較價格是否大于5000,滿足條件的過濾出來,放到一個新的Stream對象中
Stream<Waybill> waybillStream = stream.filter(item -> item.getPrice().compareTo(new BigDecimal(5000)) == 1);
// 3) 將過濾后的stream轉換為新的集合,調用collect方法即可,toList()轉換為List集合,toSet轉換為Set集合
List<Waybill> collect = waybillStream.collect(Collectors.toList());
// 遍歷,通過方法引用遍歷
collect.forEach(System.out::println);
}
}

運行結果:

解釋:

filter():方法就是中間操作,意為過濾符合條件的數據,但是這個數據你還不使用,就先不執行

collect():方法是終結操作,意為要將Stream的計算結果轉換為一個List集合,Stream認為你要用計算結果了,所以會執行計算,之后保存結果到新的集合中

計算過程Stream中是不存儲數據的,沒有獲取數據的方法

2、將推薦運單按照運費從高到低排序

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class WaybillMain {

private static List<Waybill> waybills = new ArrayList<>();

static {
// 創建數據
waybills.add(new Waybill(1L,"Y11111111111",new BigDecimal(1000),"鋼材",new BigDecimal(200),"上海市"));
waybills.add(new Waybill(2L,"Y22222222222",new BigDecimal(2000),"鋼材",new BigDecimal(300),"鄭州市"));
waybills.add(new Waybill(3L,"Y33333333333",new BigDecimal(3000),"水泥",new BigDecimal(300),"北京市"));
waybills.add(new Waybill(4L,"Y44444444444",new BigDecimal(4000),"水泥",new BigDecimal(400),"廣州市"));
waybills.add(new Waybill(5L,"Y55555555555",new BigDecimal(5000),"沙子",new BigDecimal(500),"上海市"));
waybills.add(new Waybill(6L,"Y66666666666",new BigDecimal(6000),"板材",new BigDecimal(500),"深圳市"));
waybills.add(new Waybill(7L,"Y77777777777",new BigDecimal(7000),"蔬菜",new BigDecimal(500),"杭州市"));
}

public static void main(String[] args) {
// 1、升序排序
List<Waybill> collect1 = waybills.stream().sorted(Comparator.comparing(Waybill::getPrice)).collect(Collectors.toList());
System.out.println("**升序排序**");
collect1.forEach(System.out::println);
// 2、降序排序,調用reversed方法即可降序
List<Waybill> collect2 = waybills.stream().sorted(Comparator.comparing(Waybill::getPrice).reversed()).collect(Collectors.toList());
System.out.println("**降序排序**");
collect2.forEach(System.out::println);

// 3、如果只想獲取運單號
List<String> collect3 = waybills.stream().sorted(Comparator.comparing(Waybill::getPrice)).map(Waybill::getWayNo).collect(Collectors.toList());
System.out.println("**降序只獲取運單號**");
collect3.forEach(System.out::println);
// 4、先按距離,再按運費,通過thenComparing方法做繼續排序
List<Waybill> collect4 = waybills.stream().sorted(Comparator.comparing(Waybill::getDistance).thenComparing(Waybill::getPrice)).collect(Collectors.toList());
System.out.println("**先按距離再按運費**");
collect4.forEach(System.out::println);

// 5、自定義排序
List<Waybill> collect5 = waybills.stream().sorted((o1, o2) -> {
// 排序規則:根據貨物類型排序,相同的根據距離排序
if (o1.getFreightType().equals(o2.getFreightType())) {
return o1.getDistance().compareTo(o2.getDistance());
} else {
return o1.getFreightType().compareTo(o2.getFreightType());
}
}).collect(Collectors.toList());
System.out.println("**自定義排序: 根據貨物類型排序,相同的根據距離排序**");
collect5.forEach(System.out::println);
}
}

運行結果:

3、統計最高運費,最低運費,平均運費

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class WaybillMain {

private static List<Waybill> waybills = new ArrayList<>();

static {
// 創建數據
waybills.add(new Waybill(1L,"Y11111111111",new BigDecimal(1000),"鋼材",new BigDecimal(200),"上海市"));
waybills.add(new Waybill(2L,"Y22222222222",new BigDecimal(2000),"鋼材",new BigDecimal(300),"鄭州市"));
waybills.add(new Waybill(3L,"Y33333333333",new BigDecimal(3000),"水泥",new BigDecimal(300),"北京市"));
waybills.add(new Waybill(4L,"Y44444444444",new BigDecimal(4000),"水泥",new BigDecimal(400),"廣州市"));
waybills.add(new Waybill(5L,"Y55555555555",new BigDecimal(5000),"沙子",new BigDecimal(500),"上海市"));
waybills.add(new Waybill(6L,"Y66666666666",new BigDecimal(6000),"板材",new BigDecimal(500),"深圳市"));
waybills.add(new Waybill(7L,"Y77777777777",new BigDecimal(7000),"蔬菜",new BigDecimal(500),"杭州市"));
}

public static void main(String[] args){
// 1、最高運費,通過max方法
Optional<Waybill> max = waybills.stream().max(Comparator.comparing(Waybill::getPrice));
System.out.println("**運費最高**");
System.out.println(max);
// 2、最低運費,通過min方法
Optional<Waybill> min = waybills.stream().min(Comparator.comparing(Waybill::getPrice));
System.out.println("**運費最低**");
System.out.println(min);
// 3、平均運費,通過 Collectors.averagingDouble計算平均值,需要將 BigDecimal轉換為double類型
Double avg = waybills.stream().collect(Collectors.averagingDouble(item -> item.getPrice().doubleValue()));
System.out.println("**平均運費**");
System.out.println(avg);
}

}

運行截圖:

4、將運單按貨物類型分類,將運單按貨物類型和目的地分類,將運單按照運費是否高于5000元分為兩部分

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class WaybillMain {

private static List<Waybill> waybills = new ArrayList<>();

static {
// 創建數據
waybills.add(new Waybill(1L,"Y11111111111",new BigDecimal(1000),"鋼材",new BigDecimal(200),"上海市"));
waybills.add(new Waybill(2L,"Y22222222222",new BigDecimal(2000),"鋼材",new BigDecimal(300),"鄭州市"));
waybills.add(new Waybill(3L,"Y33333333333",new BigDecimal(3000),"水泥",new BigDecimal(300),"北京市"));
waybills.add(new Waybill(4L,"Y44444444444",new BigDecimal(4000),"水泥",new BigDecimal(400),"廣州市"));
waybills.add(new Waybill(5L,"Y55555555555",new BigDecimal(5000),"沙子",new BigDecimal(500),"上海市"));
waybills.add(new Waybill(6L,"Y66666666666",new BigDecimal(6000),"板材",new BigDecimal(500),"深圳市"));
waybills.add(new Waybill(7L,"Y77777777777",new BigDecimal(7000),"蔬菜",new BigDecimal(500),"杭州市"));
}

public static void main(String[] args) {
// 1、運單按貨物類型分類
Map<String, List<Waybill>> collect1 = waybills.stream().collect(Collectors.groupingBy(Waybill::getFreightType));
System.out.println("** 運單按貨物類型分類 **");
collect1.forEach((key,value) -> {
System.out.println("key==>" + key + ",value==>" + value);
});

// 2、運單按貨物類型和目的地分類
Map<String, Map<String, List<Waybill>>> collect2 = waybills.stream().collect(Collectors.groupingBy(Waybill::getFreightType, Collectors.groupingBy(Waybill::getEndAddress)));
System.out.println("** 運單按貨物類型和目的地分類 **");
collect2.forEach((key,value) -> {
System.out.println("key==>" + key + ",value==>" + value);
});

// 3、運單按照運費是否高于5000元分為兩部分,這個叫分區了
Map<Boolean, List<Waybill>> collect3 = waybills.stream().collect(Collectors.partitioningBy(item -> item.getPrice().compareTo(new BigDecimal(5000)) == 1));
System.out.println("** 運單按照5000分區 **");
collect3.forEach((key,value) -> {
System.out.println("key==>" + key + ",value==>" + value);
});
}

}

運行截圖:

總結

Stream的概念、好處、特點和操作分類。

Stream操作集合案例,體會便利之處。

案例自己寫幾遍,再觀察自己的項目中哪里可以使用Stream替換?。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-12-30 09:24:23

Java8Stream操作

2024-10-09 08:42:03

2015-08-28 09:43:49

Java 8新特性處理集合

2021-03-02 07:13:54

Java8版本升級

2014-04-16 07:43:31

Java 8JRE

2021-03-04 08:14:37

Java8開發接口

2014-07-15 14:12:17

Java8

2021-02-22 11:51:15

Java開發代碼

2023-07-19 08:03:05

Future異步JDK

2023-05-12 07:40:01

Java8API工具

2014-07-15 14:48:26

Java8

2023-07-03 08:20:35

MySQL窗口函數

2012-06-12 11:07:56

筆記本評測

2023-03-15 17:37:26

Java8ListMap

2025-09-19 00:00:00

Java8HOT3Oracle

2014-10-20 13:57:59

JavaFX 8Java 8

2021-05-06 20:03:00

JavaStream代碼

2021-10-18 09:38:02

JavaJava8編程語言

2014-07-14 11:34:53

Java 8Nashorn

2017-10-25 11:05:14

Java
點贊
收藏

51CTO技術棧公眾號

av在线免费网址| 中国黄色一级视频| 日韩高清一级| 91成人在线精品| 亚洲色图自拍| 污污的视频网站在线观看| 日韩精品一级中文字幕精品视频免费观看| 视频一区视频二区国产精品| 147欧美人体大胆444| 久久黄色小视频| 国产麻豆精品久久| 欧美成人精品1314www| 久热免费在线观看| 欧美性猛片xxxxx免费中国| 久久久亚洲国产美女国产盗摄 | 日韩精品av| 中文字幕亚洲不卡| 欧美日韩精品免费看 | 国产丝袜精品视频| 在线观看av免费观看| 国产免费不卡| 亚洲成人综合网站| 国产成人精品免费看在线播放| 色就是色亚洲色图| 国产成人av在线影院| 国产精品无av码在线观看| 国产亚洲自拍av| 99国产精品一区二区| 亚洲精品在线视频| 久久精品aⅴ无码中文字字幕重口| 国产精品66| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美成人中文字幕| 国产又粗又长又黄的视频| 校花撩起jk露出白色内裤国产精品 | 97视频免费在线| 日韩在线一二三区| 欧美中文在线免费| 成年人免费看毛片| 激情久久中文字幕| 欧美日韩国产123| 精品人妻伦九区久久aaa片| 成人毛片在线| 中文字幕不卡av| www.狠狠爱| 欧美禁忌电影| 日韩电影中文 亚洲精品乱码 | 中文字幕欧美区| 欧美一区二区三区四区五区六区| 视频一区二区三区国产 | 91在线无精精品白丝| 亚州综合一区| 亚洲精品丝袜日韩| 插吧插吧综合网| 无码日韩精品一区二区免费| 亚洲精品福利免费在线观看| 无码一区二区精品| 神马香蕉久久| 亚洲毛片在线观看.| 久久久久久久久免费看无码 | 精品国产一区二区三区无码| 日韩经典av| 亚洲第一成年网| 99热自拍偷拍| 亚洲不卡系列| 欧美日韩高清在线播放| 中文字幕一区二区在线观看视频 | 日韩一区二区三区四区五区六区| www.桃色.com| aaa国产精品视频| 日韩成人av一区| 日韩人妻无码精品综合区| 欧美精美视频| 久久精品国产亚洲精品2020| 色老板免费视频| 欧美另类女人| 98精品在线视频| 久久久久99精品成人片我成大片| 日韩成人av影视| 国产一区香蕉久久| 精品久久久免费视频| av中文字幕一区| 日本免费一区二区三区| 免费黄网在线观看| 亚洲成年人网站在线观看| 免费激情视频在线观看| 小说区图片区亚洲| 亚洲国产精品va在线看黑人动漫| 37p粉嫩大胆色噜噜噜| 大色综合视频网站在线播放| 久久97精品久久久久久久不卡| 日韩字幕在线观看| 免费久久99精品国产| 国产91精品一区二区绿帽| 欧美日韩在线中文字幕| 亚洲日本欧美天堂| 黄色片视频在线免费观看| 粉嫩av一区二区三区四区五区| 日韩欧美国产wwwww| 性高潮久久久久久久| 欧美 日韩 国产精品免费观看| 午夜精品蜜臀一区二区三区免费| 日韩不卡高清视频| 成人天堂资源www在线| 水蜜桃亚洲精品| 91av久久| 欧美一区二区大片| 干b视频在线观看| 黄色日韩在线| 成人精品aaaa网站| 奇米影视888狠狠狠777不卡| 亚洲激情图片小说视频| 欧美亚洲日本在线观看| 国产欧美一区二区三区米奇| 揄拍成人国产精品视频| av中文在线播放| 国产精品一二三| 亚洲精品一区二区三区樱花| 天堂av中文在线观看| 日韩精品一区国产麻豆| jizzjizzjizz国产| 国产精品女主播一区二区三区| 91精品国产综合久久久久久丝袜| av在线免费观看网站| 欧美视频免费在线观看| 91九色蝌蚪porny| 亚洲欧美综合久久久| 国产精品久久二区| 日本私人网站在线观看| 午夜私人影院久久久久| 一级日本黄色片| 97精品视频在线看| 国产精品久久久久久av下载红粉 | 性亚洲最疯狂xxxx高清| 亚洲成人中文字幕在线| ...av二区三区久久精品| 日本www.色| 国产麻豆精品久久| 国产成人av网址| 久草在线免费福利资源| 懂色aⅴ精品一区二区三区蜜月| 无码国产精品一区二区免费式直播| 一本一道久久综合狠狠老| 国产精品丝袜一区二区三区| 成年人在线看| 欧美体内she精视频| 国产亚洲精品熟女国产成人| 久久综合九色| 日韩精品极品视频在线观看免费| 欧美黄色网页| 亚洲一区二区黄| 最近中文字幕在线免费观看| 国产欧美一区二区精品仙草咪| 亚洲 中文字幕 日韩 无码| 亚洲三级精品| 国产精品电影在线观看| 五月天婷婷在线视频| 欧美日韩一区二区三区视频| sm捆绑调教视频| 国产精品一区二区免费不卡| 国产免费裸体视频| 欧美激情网址| 国产成人av网| 成人午夜在线影视| 日韩精品一区二区三区蜜臀 | 99精品视频免费全部在线| 久久99精品国产99久久| 欧美性suv| 久久精品成人欧美大片古装| 国产高清免费在线观看| 亚洲国产视频一区| 欧美bbbbb性bbbbb视频| 美女视频黄 久久| 日韩精品第1页| 欧美激情极品| 国产精自产拍久久久久久蜜| 中文字幕资源网在线观看| 亚洲成人精品久久| 午夜精品免费观看| 自拍偷拍国产精品| 国产不卡一二三| 日韩av中文字幕一区二区| 伊人久久99| 久久亚洲道色| 国产精品揄拍一区二区| 久久一卡二卡| 国产亚洲欧洲黄色| 午夜精品久久久久久久爽| 青青一区二区| 亚洲综合色区另类av| 日韩精品视频一区二区| 日韩黄色小视频| 97超碰在线视| 国产一区二区在线| 亚洲va欧美va国产综合久久| 欧美13videosex性极品| www.亚洲天堂| 色视频精品视频在线观看| 在线成人免费视频| 日韩久久中文字幕| 亚洲欧美国产毛片在线| 国产熟妇搡bbbb搡bbbb| 国产一区二区三区四| av免费播放网址| 女同性一区二区三区人了人一 | 激情综合网站| 国产超碰91| 欧美黄色a视频| 欧美一区三区三区高中清蜜桃| 麻豆tv入口在线看| 亚洲午夜精品久久久久久久久久久久 | 1024在线看片你懂得| 色噜噜久久综合伊人一本| 日韩性xxxx| 91精品久久久久久久久99蜜臂| 六月丁香婷婷综合| 日韩毛片精品高清免费| 亚洲自拍偷拍图| 99精品欧美一区二区三区小说| 中文字幕日韩久久| 青青草国产成人av片免费| 日韩精品在线中文字幕| 午夜激情久久| 色就是色欧美| 精品欧美激情在线观看| 精品日本一区二区三区| 中文久久电影小说| 96国产粉嫩美女| 欧美黄页免费| 国产综合久久久久| 成人mm视频在线观看| 日韩av片电影专区| 一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 国产精品jizz在线观看美国| 亚洲一区二区三区免费观看| 精品国产一区二区三区小蝌蚪| 噜噜噜噜噜久久久久久91| 第四色中文综合网| 国产精品福利视频| 9l视频自拍九色9l视频成人| 国产成人一区二区三区免费看| 亚洲伦理久久| 成人免费视频97| 国产精品中文| 91精品国自产在线观看| 最新国产一区二区| 国产91视觉| 群体交乱之放荡娇妻一区二区| 国产伦精品一区二区三区视频免费 | 蜜臀国产一区二区三区在线播放| 成年人网站大全| 日韩精品国产欧美| 日韩一级免费片| 精品亚洲国内自在自线福利| www.国产福利| 国产馆精品极品| 又大又长粗又爽又黄少妇视频| 国产成人亚洲综合a∨猫咪| 免费国偷自产拍精品视频| 国产精品亚洲а∨天堂免在线| 又色又爽又黄18网站| 成人福利视频网站| 亚洲国产无码精品| 欧美国产成人精品| 天天操天天操天天操天天操天天操| 亚洲婷婷国产精品电影人久久| 少妇影院在线观看| 亚洲电影第三页| 成人免费毛片男人用品| 欧美网站一区二区| 国产视频aaa| 亚洲国产精品热久久| 九一在线视频| 大桥未久av一区二区三区中文| 亚洲午夜在线视频| 91ts人妖另类精品系列| 亚洲色图另类专区| 黄色激情视频在线观看| 欧美日韩一区二区三区| 中文字幕欧美在线观看| 91精品国产综合久久久久| 免费观看黄一级视频| 亚洲欧美日韩天堂| 生活片a∨在线观看| 久久久久久久久久国产精品| 奇米777日韩| 亚洲a中文字幕| 久9re热视频这里只有精品| 日韩高清专区| 亚洲视频精品| 五月婷婷狠狠操| 国产成人精品三级| 大又大又粗又硬又爽少妇毛片| 欧美国产欧美综合| 久久久综合久久| 在线观看日韩一区| 亚洲黄色一级大片| 中文国产成人精品久久一| 免费男女羞羞的视频网站在线观看| 日本免费在线精品| 亚洲啊v在线免费视频| 欧洲精品亚洲精品| 国产一在线精品一区在线观看| 日本男人操女人| 成人午夜av电影| 黄色精品视频在线观看| 日韩欧美亚洲综合| 亚洲国产www| 日韩有码片在线观看| 亚洲美女尤物影院| 动漫美女被爆操久久久| 99久久久久国产精品| 久久精品99国产| 成人黄色国产精品网站大全在线免费观看 | 成人精品国产| 蜜桃久久精品乱码一区二区| 永久91嫩草亚洲精品人人| 999精品视频在线| 91小视频在线观看| 国产一级二级三级视频| 911精品国产一区二区在线| 国产私人尤物无码不卡| 91精品国产乱码久久久久久久久 | 国产一区二区三区免费不卡| 亚洲精品888| av在线网址导航| 国产欧美精品日韩区二区麻豆天美| 日韩免费黄色片| 欧美成人一区二区三区在线观看| 成人影院在线观看| 91久久精品一区| 91蜜臀精品国产自偷在线| 一区二区三区韩国| 国产日产精品1区| 老熟妇一区二区三区| 国产视频一区在线| 中文字幕 在线观看| 精品国产一区二区三| 日韩亚洲在线| 亚洲av成人片色在线观看高潮 | 久久久久久久久久看片| 欧美亚洲精品天堂| 日韩精品在线电影| 午夜影院一区| 日本一区二区三区在线视频| 另类亚洲自拍| 美女爆乳18禁www久久久久久 | 亚洲精品播放| 黄www在线观看| 久久精品人人做人人爽97| 色老头在线视频| 最近2019年手机中文字幕| 久久伊人国产| 无码毛片aaa在线| 国产精品一级二级三级| 动漫精品一区一码二码三码四码| 亚洲第一男人天堂| 午夜不卡影院| 五月天久久综合网| 久久精品国产99国产| 亚洲欧美卡通动漫| 日韩欧美色综合| 国产福利片在线观看| 麻豆av一区二区三区久久| 日本欧美一区二区三区乱码| 国产精品麻豆免费版现看视频| 欧美精品v日韩精品v韩国精品v| 50度灰在线| 久久久www免费人成黑人精品| 视频一区二区三区入口| 国产在线观看免费视频软件| 日韩一级精品视频在线观看| 国产蜜臀一区二区打屁股调教| 久久久久久九九九九| 日本va欧美va精品发布| 欧美一区免费观看| 欧美精品一区二区久久婷婷| 中文字幕av一区二区三区佐山爱| 午夜欧美一区二区三区免费观看| 国产一区二区三区四区五区入口 | 欧美区一区二区三区| 50度灰在线| 欧美一级二级三级九九九| 精品制服美女丁香| 日产电影一区二区三区| 在线精品国产欧美| **爰片久久毛片| 国产九九在线视频| 亚洲电影在线播放| 亚乱亚乱亚洲乱妇| 国产精品大全| 蜜桃传媒麻豆第一区在线观看| 特级片在线观看| 国产亚洲人成a一在线v站| 色悠久久久久综合先锋影音下载| 国产成人无码精品久久久性色| |精品福利一区二区三区| 青青草免费观看免费视频在线| 91中文字幕一区| 日韩精品亚洲一区二区三区免费|