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

詳解Java Stream的分組和聚合

譯文
開發(fā) 前端
學(xué)習(xí)使用 Java Stream更快地解決問題,它使我們能夠高效地處理大量數(shù)據(jù)。

譯者 | 翟珂

審校 | 孫淑娟 梁策

當(dāng)我們將一個(gè)集合中的元素分組后,我們可以對(duì)分組內(nèi)元素的字段進(jìn)行聚合,執(zhí)行有意義的操作,幫助我們分析數(shù)據(jù)。比如相加,取平均數(shù),或最大/最小值。此外,還可以用Java Stream和Collectors輕松完成這些字段的聚合。文檔中提供了這些計(jì)算的簡(jiǎn)單例子。

當(dāng)然,還有更復(fù)雜的聚合,如加權(quán)平均數(shù)、幾何平均數(shù)。另外,可能還需要對(duì)幾個(gè)字段同時(shí)進(jìn)行聚合。在這篇文章中,我們將展示如何使用 Java Stream更快地解決這類問題,這個(gè)框架使我們能夠高效地處理大量數(shù)據(jù)。

假設(shè)讀者已對(duì)Java Streams和Collectors類有基本的了解:

問題示例

舉一個(gè)簡(jiǎn)單的例子來展示它的用途,這個(gè)例子會(huì)盡量通俗,方便概括。一個(gè)由TaxEntry實(shí)體構(gòu)成的集合(稅收),實(shí)體代碼定義如下:

public class TaxEntry {

private String state;
private String city;
private int numEntries;
private double price;
//Constructors, getters, hashCode, equals etc
}

計(jì)算每個(gè)城市的稅目總數(shù)非常簡(jiǎn)單:

Map<String, Integer> totalNumEntriesByCity = 
taxes.stream().collect(Collectors.groupingBy(TaxEntry::getCity,
Collectors.summingInt(TaxEntry::getNumEntries)));

Collectors.groupingBy需要兩個(gè)參數(shù):一個(gè)分類函數(shù)來做分組條件,一個(gè)收集器來做分組后流的組內(nèi)聚合。在這我們使用TaxEntry::getCity作為分類條件。使用Collectors::summingInt方法來處理分組后的流,它返回一個(gè)Collector收集器,即對(duì)每組的稅目數(shù)進(jìn)行合計(jì)。

如果想要進(jìn)行復(fù)合分組,事情就有點(diǎn)復(fù)雜了。例如,在前面的問題中,去求每個(gè)省和城市的總稅目數(shù),我們先定義方法:

record StateCityGroup(String state, String city) {}

注意,我們使用的是一個(gè)Java record,這是一種定義不可變數(shù)據(jù)類的簡(jiǎn)潔方式。Java編譯器會(huì)為我們生成類的getter、setter、hashCode、equals和toString方法。這樣就可以很簡(jiǎn)單地解決問題:

Map<StateCityGroup, Integer> totalNumEntriesForStateCity = 
taxes.stream().collect(groupingBy(p -> new StateCityGroup(p.getState(), p.getCity()),
Collectors.summingInt(TaxEntrySimple::getNumEntries))
);

我們使用lambda表達(dá)式來設(shè)置分類函數(shù),創(chuàng)建一個(gè)新的StateCityGroup類用來封裝每個(gè)省的城市。分組后流的收集器與之前一致。

備注:為了簡(jiǎn)潔起見,在代碼示例中,我們假設(shè)Collectors類的所有方法都是靜態(tài)導(dǎo)入的。

如果想同時(shí)做幾個(gè)聚合,就變得復(fù)雜了。例如,找到一個(gè)給定的省和城市的稅目數(shù)和平均價(jià)格的總和,框架沒有提供一個(gè)簡(jiǎn)單的方法。

為了解決這個(gè)問題,我們從之前的聚合中得到啟發(fā),定義一個(gè)record,封裝所有需要聚合的字段。

record TaxEntryAggregation (int totalNumEntries, double averagePrice ) {}

現(xiàn)在,我們?cè)撛趺赐瑫r(shí)對(duì)這兩個(gè)字段進(jìn)行聚合呢?那就是做兩次流收集,分別找到每一個(gè)聚合,如下面代碼:

Map<StateCityGroup, TaxEntryAggregation> aggregationByStateCity = taxes.stream().collect(
groupingBy(p -> new StateCityGroup(p.getState(), p.getCity()),
collectingAndThen(Collectors.toList(),
list -> {int entries = list.stream().collect(
summingInt(TaxEntrySimple::getNumEntries));
double priceAverage = list.stream().collect(
averagingDouble(TaxEntrySimple::getPrice));
return new TaxEntryAggregation(entries, priceAverage);})));

分組和以前一樣,但對(duì)于分組后流,我們使用Collectors::collectionAndThen進(jìn)行聚合。這個(gè)函數(shù)需要兩個(gè)參數(shù):

  • 我們將第一次分組的流轉(zhuǎn)換為一個(gè)集合(使用Collectors::toList())。
  • 我們使用一個(gè)lambda表達(dá)式來結(jié)束函數(shù),從上一步的集合中創(chuàng)建兩個(gè)不同的流來做聚合,并存在TaxEntryAggregation類中返回。

如果我們想同時(shí)做更多的字段聚合,那么我們將增加后續(xù)流集合中的流數(shù)量。這樣代碼就會(huì)變得效率低下,代碼冗余。所以我們應(yīng)該尋找更好的替代方案。

還有一個(gè)問題,通常我們?cè)谑褂肅ollectors類時(shí),可以做的聚合類型有限。而且求和、求平均和歸納只提供了對(duì)integer、long和double類型的支持。如果我們有更復(fù)雜的類型如BigInteger或BigDecimal時(shí),該怎么辦?

更糟的是,歸納方法只提供了min、max、count、sum和average的統(tǒng)計(jì)。如果我們想進(jìn)行更復(fù)雜的計(jì)算,如加權(quán)平均數(shù)或幾何平均數(shù),怎么辦?

有些人會(huì)說,我們可以編寫自定義的收集器(Collectors),但這需要深刻理解收集器的接口和對(duì)流式收集器流程。不如直接使用Collectors類中的內(nèi)置方法。在下一節(jié)中,我們將解決這些問題。

復(fù)雜的多重聚合:一種解決方法

針對(duì)上面的問題,我們寫一個(gè)例子。假設(shè)我們有實(shí)體:

public class TaxEntry {
private String state;
private String city;
private BigDecimal rate;
private BigDecimal price;
record StateCityGroup(String state, String city) {
}
//Constructors, getters, hashCode/equals etc
}

我們首先要思考的是,對(duì)于每個(gè)不同的<省-城市>,我們?nèi)绾文苷业蕉惸康目倲?shù)以及稅率和價(jià)格的乘積的總和(∑(稅率*價(jià)格))。其中需要注意的點(diǎn)是使用BigDecimal進(jìn)行多字段聚合。

與上一節(jié)一樣,我們定義了一個(gè)封裝聚合指標(biāo)的類。

record RatePriceAggregation(int count, BigDecimal ratePrice) {}

對(duì)于分組后的簡(jiǎn)單聚合,一個(gè)高效的方法是Collectors::toMap。

Map<StateCityGroup, RatePriceAggregation> mapAggregation = taxes.stream().collect(
toMap(p -> new StateCityGroup(p.getState(), p.getCity()),
p -> new RatePriceAggregation(1, p.getRate().multiply(p.getPrice())),
(u1,u2) -> new RatePriceAggregation( u1.count() + u2.count(), u1.ratePrice().add(u2.ratePrice()))
));

Collectors::toMap需要三個(gè)參數(shù):

  • 第一個(gè)參數(shù)是一個(gè)lambda表達(dá)式,用于生成Map的key。這個(gè)函數(shù)創(chuàng)建StateCityGroup對(duì)象作為key。這將按<省+城市>元素進(jìn)行分組。
  • 第二個(gè)參數(shù)產(chǎn)生Map的value。在示例中,我們創(chuàng)建了一個(gè)RatePriceAggregation對(duì)象,初始化:1個(gè),稅率與價(jià)格的乘積。
  • 最后一個(gè)參數(shù)是一個(gè)二進(jìn)制運(yùn)算器,用于合并相同key(省-城市)的value值。然后將計(jì)數(shù)和價(jià)格相加進(jìn)行聚合。

下面造一些數(shù)據(jù)來進(jìn)行測(cè)試:

List<TaxEntry> taxes = Arrays.asList(
new TaxEntry("New York", "NYC", BigDecimal.valueOf(0.2), BigDecimal.valueOf(20.0)),
new TaxEntry("New York", "NYC", BigDecimal.valueOf(0.4), BigDecimal.valueOf(10.0)),
new TaxEntry("New York", "NYC", BigDecimal.valueOf(0.6), BigDecimal.valueOf(10.0)),
new TaxEntry("Florida", "Orlando", BigDecimal.valueOf(0.3), BigDecimal.valueOf(13.0)));

從上面的map中獲取紐約的結(jié)果:

System.out.println("New York: " + mapAggregation.get(new StateCityGroup("New York", "NYC")));

輸出結(jié)果:

New York: RatePriceAggregation[count=3, ratePrice=14.00]

這是一種解決方法,處理了多個(gè)字段和非原始數(shù)據(jù)類型(在我們的例子中為BigDecimal)的分組和聚集。但是,它的缺點(diǎn)是你不能進(jìn)行其他最終結(jié)果的聚合,比如不能做任何形式的平均數(shù)。

如果要計(jì)算<稅率-價(jià)格>的加權(quán)平均數(shù),以及每個(gè)<省-城市>的所有價(jià)格的總和。我們需要先計(jì)算屬于每個(gè)<省-城市>的所有稅目的稅率和價(jià)格的乘積之和,然后除以每種情況的總稅目數(shù)n。1/n ∑(費(fèi)率*價(jià)格)。

我們定義一個(gè)含有總價(jià)的實(shí)體類。

record TaxEntryAggregation(int count, BigDecimal weightedAveragePrice, BigDecimal totalPrice) {}

然后我們解決上述問題:

Map<StateCityGroup, TaxEntryAggregation> groupByAggregation = taxes.stream().collect(
groupingBy(p -> new StateCityGroup(p.getState(), p.getCity()),
mapping(p -> new TaxEntryAggregation(1, p.getRate().multiply(p.getPrice()), p.getPrice()),
collectingAndThen(reducing(new TaxEntryAggregation(0, BigDecimal.ZERO, BigDecimal.ZERO),
(u1,u2) -> new TaxEntryAggregation(u1.count() + u2.count(),
u1.weightedAveragePrice().add(u2.weightedAveragePrice()),
u1.totalPrice().add(u2.totalPrice()))
),
u -> new TaxEntryAggregation(u.count(),
u.weightedAveragePrice().divide(BigDecimal.valueOf(u.count()),
2, RoundingMode.HALF_DOWN),
u.totalPrice())
)
)
));

這段代碼有些復(fù)雜,但有效地解決了問題。下面詳細(xì)講解一下:

  • Collectors::groupingBy

1. 我們創(chuàng)建一個(gè)StateCityGroup對(duì)象用于分組

2. 對(duì)于分組后流,我們調(diào)用Collectors::mapping方法

  • 第一個(gè)參數(shù),將分組的<省-城市>稅收類轉(zhuǎn)換為TaxEntryAggregation對(duì)象,然后初始化:個(gè)數(shù)為1,稅率乘以價(jià)格,價(jià)格。
  • 對(duì)于后續(xù)流,我們調(diào)用Collectors::collectionAndThen方法進(jìn)行整理轉(zhuǎn)換。

1.調(diào)用Collectors::reducing

  • 創(chuàng)建一個(gè)有值的TaxEntryAggregation類防止空值。
  • Lambda表達(dá)式實(shí)現(xiàn)reducing方法,并返回TaxEntryAggregation對(duì)象,并進(jìn)行相應(yīng)字段的聚合。

2.歸納轉(zhuǎn)換,使用前一個(gè)reducing中計(jì)算的個(gè)數(shù)計(jì)算平均數(shù),并返回最終的TaxEntryAggregation。

這個(gè)方法不僅可以同時(shí)對(duì)多個(gè)字段進(jìn)行聚合,而且還可以分幾個(gè)階段進(jìn)行復(fù)雜的計(jì)算。

所以這是一個(gè)去解決這類問題的簡(jiǎn)單方法。歸納一下就是:定義一個(gè)封裝了所有需要聚合的字段的record,使用Collectors::mapping來初始化記錄,然后使用Collectors::collectionAndThen來做二次處理和最終聚合。

與上一節(jié)一樣,我們可以得到紐約的聚合結(jié)果:

System.out.println("Finished aggregation: " + groupByAggregation.get(new StateCityGroup("New York", "NYC")));

結(jié)果:

Finished aggregation: TaxEntryAggregation[count=3, weightedAveragePrice=4.67, totalPrice=40.0]

備注:由于TaxEntryAggregation是一條Java record,且是不可改變的,所以可以使用stream collector庫來并行流計(jì)算。

結(jié)論

我們編寫了幾個(gè)復(fù)雜的多字段分組聚合示例,其中包括非原始數(shù)據(jù)類型的多字段聚合和跨字段聚合計(jì)算。這些表明了可以通過Java Stream和Collectors API及record集合來高效的處理大量數(shù)據(jù)。

譯者介紹

翟珂,51CTO社區(qū)編輯,目前在杭州從事軟件研發(fā)工作,做過電商、征信等方面的系統(tǒng),享受分享知識(shí)的過程,充實(shí)自己的生活。

原文標(biāo)題:Grouping and Aggregations With Java Streams,作者:Manu Barriola

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2024-12-26 07:33:02

2023-05-29 09:21:53

SQLAlchemySQL

2021-01-26 09:50:06

鴻蒙HarmonyOS遠(yuǎn)程調(diào)用

2024-10-11 16:51:02

2023-11-29 08:19:45

Go泛型缺陷

2025-01-13 00:08:01

2020-04-15 15:48:03

Node.jsstream前端

2023-10-24 09:26:03

數(shù)據(jù)分析

2014-07-16 16:42:41

Java8streamreduce

2011-04-12 14:47:54

UML

2009-03-25 09:00:11

Group By排序MySQL

2009-06-25 15:20:28

CollectionMap

2014-04-15 09:40:04

Java8stream

2022-09-23 09:25:04

代碼方法

2022-12-12 09:13:45

global聚合filters

2023-10-10 10:43:19

JavaJDK1.8

2009-06-19 16:46:18

IntegerJava

2022-12-09 07:48:10

Java8Stream表達(dá)式

2022-12-30 09:24:23

Java8Stream操作

2023-11-27 13:53:00

Java數(shù)據(jù)轉(zhuǎn)換
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

四虎在线观看| 色撸撸在线视频| 中文字幕人妻熟女在线| 精品无码m3u8在线观看| 亚洲日产av中文字幕| 欧美午夜精品久久久久久孕妇| 中日韩午夜理伦电影免费| 妺妺窝人体色www在线观看| 国产毛片一区二区三区va在线| 亚洲国产一区二区三区在线播放| 亚洲成人黄色在线| 中文字幕成人在线视频| av在线最新| 国产精品毛片a∨一区二区三区| 成人h在线播放| 国产在线观看第一页| 欧美日韩日本国产亚洲在线 | 日韩毛片精品高清免费| 国产精品视频一区二区三区经| 亚洲色图第四色| 日韩av综合| 欧美色爱综合网| 国产www免费| 日本美女高清在线观看免费| 91丨porny丨国产入口| 亚洲综合在线播放| 欧美日韩 一区二区三区| 激情综合在线| 性人久久久久| 蜜桃精品视频在线| 欧美精品久久久久久久久| 欧美丰满老妇熟乱xxxxyyy| 57pao国产一区二区| 欧美三日本三级三级在线播放| 男女激情无遮挡| 在线中文字幕第一页| 国产精品美女久久久久久久久| 国产欧美一区二区在线播放| 午夜精品久久久久久久99| 亚洲精品网址| 一夜七次郎国产精品亚洲| 国产毛片毛片毛片毛片毛片毛片| 日本一区精品视频| 91.麻豆视频| 羞羞的视频在线| av在线日韩| 国产精品入口麻豆原神| 免费一区二区三区| 香蕉视频免费在线看| 成人听书哪个软件好| 91青青草免费观看| 五月天综合激情| 亚洲激情亚洲| 国内精品久久久久| 精品在线视频免费| 伊人蜜桃色噜噜激情综合| 色中色综合影院手机版在线观看| 国产成人自拍网站| 亚洲综合婷婷| 久久中文字幕视频| 欧美片一区二区| 亚洲性人人天天夜夜摸| 欧美精品久久久久久久免费观看| 久久机热这里只有精品| 海角社区69精品视频| 欧美激情精品久久久久久黑人 | 91网址在线观看精品| 亚洲伦理网站| 日韩一级片在线观看| 人妻巨大乳一二三区| 久操视频免费在线观看| 成人午夜福利视频| 成人网页在线观看| 美女主播视频一区| 国产免费a∨片在线观看不卡| 国产色产综合产在线视频| 神马欧美一区二区| 超碰个人在线| 亚洲午夜精品一区二区三区他趣| 免费av手机在线观看| sese综合| 欧美日本韩国一区二区三区视频 | 日韩电影免费看| 日韩欧美亚洲国产一区| 亚洲无吗一区二区三区| 成人污版视频| 亚洲精品动漫100p| 国产精成人品免费观看| 在线中文一区| 青青草原一区二区| 国产精品自产拍| 成人国产视频在线观看| 先锋在线资源一区二区三区| av软件在线观看| 欧美日韩激情网| 国产福利片一区二区| 污污网站在线看| 色婷婷精品大在线视频| 亚洲а∨天堂久久精品9966| 国产精品专区在线| av在线播放一区| 日韩你懂的在线播放| 国产情侣av自拍| 国产一区二区av在线| 亚洲福利视频久久| 美国精品一区二区| 99日韩精品| 成人免费网站在线观看| 四虎精品在线| 亚洲精品乱码久久久久| 亚洲国产欧美不卡在线观看 | 欧美精品一区二区久久久| 成人国产精品久久久网站| 亚洲激情久久| 国产精品第二页| 黄色av一级片| 国产suv精品一区二区6| 日韩欧美精品在线不卡| 77thz桃花论族在线观看| 欧美日韩一区不卡| 成年人网站免费看| 国产综合自拍| 亚洲aⅴ男人的天堂在线观看| 国产中文字幕在线视频| 香蕉av福利精品导航| 久国产精品视频| 国产亚洲欧美日韩在线观看一区二区| 欧美激情一区二区久久久| 中文字幕精品无码亚| 久久综合久久综合九色| 日韩av在线直播| 亚洲精品高清无码视频| 中文在线免费一区三区| 久久精品久久久久| 在线永久看片免费的视频| 国产盗摄女厕一区二区三区| 午夜精品一区二区在线观看| 成人短视频app| 日韩av中文字幕在线| 欧美日韩中文视频| 国产成人一区二区精品非洲| 97超碰免费观看| 国产原创视频在线观看| 在线观看国产日韩| 亚洲一区二区三区蜜桃| 99人久久精品视频最新地址| 国产三级精品在线不卡| 爱情岛亚洲播放路线| 精品日韩99亚洲| 欧美成人精品欧美一级| 国产在线精品一区二区夜色| 一区二区在线观看网站| 亚洲精品tv| 日韩欧美成人一区二区| 亚洲视频重口味| 激情小说亚洲一区| 国产欧美日韩综合精品二区| 日本欧美电影在线观看| 欧美成人免费网站| 国产在线观看成人| aaa欧美色吧激情视频| 怡红院av亚洲一区二区三区h| 欧美wwwsss9999| 欧美在线视频一区二区| 青春有你2免费观看完整版在线播放高清 | 五月天久久777| 国产精品永久免费在线| 黄黄的网站在线观看| 欧美一区二区在线免费观看| 免费视频网站www| 成人精品视频.| 精品国产免费av| 国内精品伊人久久久| 国产精品一久久香蕉国产线看观看 | 国产福利视频一区二区三区| 日韩美女爱爱视频| 蜜桃一区av| 国产成人精品国内自产拍免费看| 免费在线一级视频| 欧美人体做爰大胆视频| 黄色片在线观看网站| 9人人澡人人爽人人精品| 男人操女人免费| 天天做天天爱天天综合网2021| 亚洲自拍偷拍在线| 午夜裸体女人视频网站在线观看| 亚洲欧美日韩天堂一区二区| 一级特黄aaa大片| 99久久精品国产毛片| 在线观看欧美激情| japanese色系久久精品| 日本久久久久久| 国产日产一区二区| 日韩电影网在线| 一级片视频播放| 亚洲国产一区二区在线播放| 超薄肉色丝袜一二三| 国产99久久精品| 欧美日韩在线不卡视频| 91精品国产调教在线观看| 久久久久欧美| av老司机在线观看| 一本色道久久88综合亚洲精品ⅰ| 国产精品无码久久av| 欧美性生交xxxxx久久久| 小泽玛利亚一区二区免费| 99久久精品免费观看| 爱豆国产剧免费观看大全剧苏畅| 亚洲精品1区| 懂色av粉嫩av蜜臀av| 西野翔中文久久精品字幕| 3d蒂法精品啪啪一区二区免费| 在线播放高清视频www| 视频一区二区三区在线| 久久在线免费观看视频| 一区二区三区视频| 午夜精品久久久久久久96蜜桃| 欧美日韩在线第一页| 亚洲伦理一区二区三区| 久久这里只有精品6| 亚洲女人在线观看| 免费人成在线不卡| 能在线观看的av| 国自产拍偷拍福利精品免费一| 亚洲国产精品一区在线观看不卡| 欧美日韩一区二区三区四区不卡| 亚洲xxxxx电影| 国内欧美日韩| 国产精品国模在线| 一二三四视频在线中文| 97欧美精品一区二区三区| 怡红院在线播放| 久久久精品免费视频| av国产在线观看| 一区二区欧美亚洲| 欧美日韩伦理片| 日韩成人av网址| 色综合久久久久久| 亚洲国内高清视频| 欧美77777| 亚洲а∨天堂久久精品9966| www.国产欧美| 日韩欧美在线综合网| 国产免费高清视频| 91精品欧美综合在线观看最新| 欧美一级做a爰片免费视频| 色综合久久综合网97色综合| 亚洲午夜18毛片在线看| 久久蜜桃av一区二区天堂| 久久久久国产精品无码免费看| 国产精品538一区二区在线| 日韩视频在线观看一区二区三区| 久久国产欧美日韩精品| 无限资源日本好片| 开心九九激情九九欧美日韩精美视频电影| 久草综合在线观看| 久久精品免费观看| 91插插插影院| 国产大陆精品国产| 亚洲精品无码一区二区| a美女胸又www黄视频久久| 一女三黑人理论片在线 | 91超薄肉色丝袜交足高跟凉鞋| 国产精品亚洲人在线观看| 老熟女高潮一区二区三区| 成人动漫一区| 色综合天天做天天爱| 日韩精品久久久久久免费| 日本韩国欧美在线| 在线观看一二三区| 日韩一区二区三免费高清| 后进极品白嫩翘臀在线视频| 亚洲国产黄色片| 免费一级在线观看| 久久韩剧网电视剧| 欧美一卡二卡| 国产一区二区三区在线看| 国产高清免费av在线| 久久伊人精品天天| 成人一级福利| 国产精品久久久久9999| 国产成人免费av一区二区午夜 | 一本色道久久综合亚洲| 欧美一级片在线| 五月天婷婷在线播放| 中文欧美在线视频| 激情在线视频播放| 国产精品吹潮在线观看| а天堂中文最新一区二区三区| 国产精品久久久久免费| 精品国产一区探花在线观看| 欧美xxxx吸乳| 校园春色综合网| 日本网站在线看| 久久综合一区二区| 永久免费看黄网站| 色哟哟精品一区| 国产成人精品毛片| 欧美色视频一区| 人妻一区二区三区| 中文字幕一区二区三区电影| 高清电影在线观看免费| 国产欧美欧洲在线观看| 国产suv精品一区二区四区视频| 日韩欧美视频一区二区三区四区| 欧美日本一区二区高清播放视频| 粉嫩虎白女毛片人体| 噜噜噜91成人网| 亚洲精品鲁一鲁一区二区三区 | 日本不卡网站| 亚洲iv一区二区三区| 精品国精品国产自在久国产应用| 男人添女荫道口女人有什么感觉| 蜜桃视频在线观看一区二区| 一级黄色片毛片| 综合自拍亚洲综合图不卡区| 日韩在线视频不卡| 精品国产一区二区三区久久影院| 99视频在线观看地址| 欧美专区日韩视频| 成人在线tv视频| 日韩视频 中文字幕| 欧美日韩国产亚洲一区| 91极品尤物在线播放国产| 91丨porny丨中文| 国产情侣在线视频| 另类视频一区二区三区| 国产乱肥老妇国产一区二| 偷拍自拍亚洲色图| 97视频在线免费| 国产二区国产一区在线观看| av在线免费播放网址| 国产精品高潮久久久久无| 久久国产视频播放| 精品国产乱码久久久久久免费| 黄色av电影在线观看| 成人a免费视频| 999视频精品| 黄色成人免费看| 国产午夜精品一区二区| 无码人妻精品一区二区50| 亚洲精品一区久久久久久| 美女91在线看| 久久资源av| 欧美亚洲专区| 国产精品成人一区二区三区电影毛片 | 久久99国产精品| 99热这里只有精品8| 国产白嫩美女无套久久| 欧美日韩一区二区精品| 日本免费一区二区三区最新| 热门国产精品亚洲第一区在线| 亚洲va久久久噜噜噜久久| 凹凸日日摸日日碰夜夜爽1| 久久综合色播五月| 五月激情丁香网| 久久激情视频久久| 国产成年精品| 成人免费a级片| 成人av在线一区二区三区| 日本少妇做爰全过程毛片| 精品处破学生在线二十三| 国产在线美女| 日韩精品国内| 美女脱光内衣内裤视频久久影院| 任你操精品视频| 欧美一级专区免费大片| 丰乳肥臀在线| 秋霞久久久久久一区二区| 美女性感视频久久| 女人裸体性做爰全过| 制服丝袜亚洲精品中文字幕| 日本www在线| 亚洲一区中文字幕在线观看| 国产一区清纯| 青青草福利视频| 欧美巨大另类极品videosbest | 国产一区精品| 国产欧美日韩亚洲精品| 一个色综合网| free性中国hd国语露脸| 在线国产电影不卡| 在线āv视频| 久久伊人资源站| 激情久久久久久久久久久久久久久久| 久久网免费视频| 亚洲人a成www在线影院| 欧美高清一级片| 国产欧美在线一区| 亚洲激情自拍偷拍| 天天操天天爽天天射| 麻豆国产欧美日韩综合精品二区| 免费在线黄色网| 亚洲男人7777| 秋霞午夜一区二区三区视频| 久久久久狠狠高潮亚洲精品| 亚洲精品久久久久久国产精华液| 色视频在线观看| 亚洲一区二区三区在线视频| 免费日韩av|