精品欧美一区二区三区在线观看 _久久久久国色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)

永久免费毛片在线播放| 国产综合视频在线| 综合在线视频| 亚洲第一页在线| 欧美两根一起进3p做受视频| 香蕉视频在线看| 不卡欧美aaaaa| 国产精品久久久久久久久影视| 精品在线观看一区| 粉嫩的18在线观看极品精品| 欧美在线一区二区| www.日本在线视频| 成人免费在线电影| 粉嫩一区二区三区在线看| 日韩**中文字幕毛片| 全网免费在线播放视频入口| 伊人成综合网yiren22| 激情欧美日韩一区二区| 亚洲精品免费一二三区| 91tv官网精品成人亚洲| 欧美tk丨vk视频| 一区二区三区网址| 国模精品视频| 亚洲免费在线视频一区 二区| 蜜桃视频在线观看91| 国产夫绿帽单男3p精品视频| 日韩1区2区日韩1区2区| 午夜精品99久久免费| 极品色av影院| 久久不见久久见国语| 欧美成人乱码一区二区三区| 天天色综合社区| jizz内谢中国亚洲jizz| 亚洲成人你懂的| 欧美 另类 交| 91精品专区| 国产丝袜欧美中文另类| 九色综合婷婷综合| 亚洲国产精品suv| 国产在线播放一区三区四| 国产精品h在线观看| 成年人视频在线免费看| 99精品国产一区二区青青牛奶| 久久综合88中文色鬼| 国产主播av在线| 精品久久久久久久| 亚洲精品97久久| 久久久久亚洲av无码专区首jn| 99精品女人在线观看免费视频 | 欧美极品色图| 天天操天天射天天舔| 成人视屏免费看| 国产精品久久7| 亚洲精品视频网| 国产一区二区三区免费播放| 91在线播放国产| 国产男男gay网站| 国产最新精品免费| 91久久久久久久久| 国产v在线观看| 国产成人在线看| 国产精品日本一区二区| 蜜桃久久一区二区三区| 99国产精品久| 欧美一区二区三区在线播放 | 狠狠色狠狠色综合婷婷tag| 国产视频久久网| 美女脱光内衣内裤| 成人中文在线| 美女少妇精品视频| 久久视频免费看| 99国产一区| 国产精品扒开腿做爽爽爽男男 | 精品一区二区免费视频| 91网站在线看| 欧美视频一二区| 久久欧美一区二区| 一本一本久久a久久精品综合妖精| 午夜免费视频在线国产| 亚洲精品一二三| av片在线免费| 另类激情视频| 3d成人h动漫网站入口| 91精产国品一二三| 久久成人av| 久久精品影视伊人网| 久久久久久av无码免费网站| 性高湖久久久久久久久| 国产精品爽爽爽爽爽爽在线观看| 99久久久久成人国产免费| 丁香婷婷深情五月亚洲| 欧美影视一区二区| 色操视频在线| 色一情一伦一子一伦一区| www.cao超碰| 久久夜色精品国产噜噜av小说| 亚洲人成电影在线播放| 人妻人人澡人人添人人爽| 亚洲免费观看| 亚洲一区美女视频在线观看免费| 婷婷在线免费视频| 国产精品水嫩水嫩| 东北少妇不带套对白| 精品三区视频| 亚洲成人av中文字幕| 亚洲ⅴ国产v天堂a无码二区| 欧美先锋影音| 国产精品日韩电影| 黄色av小说在线观看| 国产精品素人一区二区| jizzjizz国产精品喷水| 国产精品视频一区视频二区| 亚洲精品视频在线播放| 四虎免费在线视频| 日韩二区三区四区| 国产一区二区三区无遮挡| 国产在线1区| 在线观看国产91| 182在线视频| 欧美成人日韩| 国产精品美女主播在线观看纯欲| 少妇人妻偷人精品一区二区| 亚洲欧美日韩国产另类专区| 爱情岛论坛成人| 青青操综合网| 久久久久在线观看| 国产成人三级在线播放| 国产精品久久久久久久久免费桃花| 国产精品又粗又长| 9l视频自拍九色9l视频成人| 久久精品成人欧美大片古装| 久久久久亚洲视频| 91美女精品福利| 妞干网在线视频观看| 欧美久久一区二区三区| 色偷偷偷亚洲综合网另类| 伦av综合一区| 91网站在线播放| 精品国产一二三四区| 中文字幕日韩在线| 欧美成人免费网| 国产三级视频在线播放| 国产精品久久影院| 黄色手机在线视频| 成人系列视频| 国产色综合天天综合网 | 国产欧美久久久精品影院| 北条麻妃在线视频观看| 欧美国产不卡| 91高清免费在线观看| 天天综合网在线观看| 偷窥国产亚洲免费视频| a天堂视频在线观看| 亚洲区第一页| 你懂的视频在线一区二区| 五月天国产在线| 亚洲精品一区久久久久久| 全部毛片永久免费看| 91麻豆高清视频| 亚洲熟妇av一区二区三区| 妖精视频一区二区三区免费观看| 日本精品久久中文字幕佐佐木| 每日更新在线观看av| 在线视频欧美区| 天天干天天操天天拍| 久久精品久久精品| 黄色网在线视频| 国产精品对白| 国产ts人妖一区二区三区| 你懂的免费在线观看| 欧美在线一二三| 日本中文在线视频| av一区二区三区在线| 欧美日韩亚洲第一| 国产精品精品| 成人三级在线| 在线免费日韩片| xxx欧美精品| 高潮一区二区三区乱码| 一本到一区二区三区| 婷婷国产成人精品视频| 国产成人精品午夜视频免费| 国产视频九色蝌蚪| 欧美在线免费看视频| 亚洲自拍偷拍视频| 欧美a级在线观看| 色哟哟入口国产精品| 亚洲黄色在线免费观看| 欧美视频中文在线看| 国产精品久久久久无码av色戒| 久久狠狠亚洲综合| 怡红院av亚洲一区二区三区h| 成人羞羞视频播放网站| 国产精品国模大尺度私拍| 色豆豆成人网| 欧美激情亚洲视频| 国产女人在线视频| 欧美成人一级视频| 亚洲天堂男人网| 精品二区三区线观看| 一本一本久久a久久| av在线这里只有精品| 可以看污的网站| 国产精品色网| 300部国产真实乱| 欧美一区二区三| 久久亚洲一区二区| 视频精品二区| 国产在线精品一区免费香蕉| 麻豆理论在线观看| 久久久精品久久| 成黄免费在线| 亚洲精品中文字幕有码专区| 99热这里只有精品5| 在线观看不卡一区| av中文在线播放| 亚洲狠狠爱一区二区三区| 在线观看天堂av| 久久免费的精品国产v∧| 日本少妇一级片| 精品一区二区免费看| 91看片就是不一样| 一本色道久久综合一区| 最近免费观看高清韩国日本大全| 欧美日韩色图| 欧洲精品亚洲精品| 亚州综合一区| 国产成人免费观看| 日韩免费成人| 亚洲xxxx做受欧美| 成人激情久久| 91精品免费看| 欧美性生活一级| 国产美女精品视频| 国产精品久久久久久吹潮| 日本一区二区不卡| 成人片免费看| 欧美在线亚洲在线| 手机在线理论片| 7m精品福利视频导航| 后进极品白嫩翘臀在线播放| 欧美成人午夜激情视频| 福利在线视频网站| 久久艳片www.17c.com | 国产精品黄色在线观看| 免费成人深夜天涯网站| 国产亚洲va综合人人澡精品 | 黄色不卡一区| 日产国产精品精品a∨| 国产精品一区二区av日韩在线| 欧美美乳视频网站在线观看| 国产欧美日韩精品一区二区免费 | 51精产品一区一区三区| 亚洲三区四区| 91成人网在线观看| 黄色网在线视频| 99国产精品自拍| 成年人免费在线播放| 久久久久久久波多野高潮日日| 日日摸天天爽天天爽视频| 久久狠狠一本精品综合网| 欧美精品无码一区二区三区| 另类综合日韩欧美亚洲| 天堂一区在线观看| 国产乱国产乱300精品| 337p日本欧洲亚洲大胆张筱雨| 成人免费视频app| 漂亮人妻被黑人久久精品| 91免费观看视频| 性欧美精品中出| 亚洲色图欧美在线| 日韩aaaaaa| 欧美在线啊v一区| 国产精品自产拍| 精品国产91乱码一区二区三区 | 久久久久久久久91| 涩涩视频在线播放| 国产欧美精品日韩| 成人线上播放| 日韩色妇久久av| 亚洲视频在线免费| 日韩欧美在线播放视频| 狠狠色综合日日| 国产精品一区二区人妻喷水| 国产欧美日韩久久| 久草资源在线视频| 色哟哟亚洲精品| 亚洲成人一级片| 亚洲视频在线看| 青青草视频在线免费直播| 欧美专区日韩视频| 国产一区一区| 欧美性bbwbbwbbwhd| 欧美一区不卡| 韩国日本美国免费毛片| 国产成人综合视频| 怡红院一区二区三区| 亚洲主播在线播放| 最新在线中文字幕| 亚洲国产黄色片| 欧美激情午夜| 日本一区二区三区四区视频| 麻豆国产一区| 色涩成人影视在线播放| 亚洲国产精品第一区二区| 在线观看av网页| 久久亚洲综合色一区二区三区| 久久精品视频免费在线观看| 欧美午夜在线一二页| 手机在线观看免费av| 久久视频免费观看| 99只有精品| 免费观看国产成人| 在线播放一区| 伊人免费视频二| 国产三级精品三级| 欧美精品韩国精品| 亚洲国产精品大全| 在线中文字幕-区二区三区四区| 国产成人精品最新| 偷窥自拍亚洲色图精选| 日韩激情视频一区二区| 韩国精品久久久| 中国美女黄色一级片| 欧美午夜电影在线| 少妇高潮久久久| 欧美极品少妇xxxxⅹ裸体艺术| 国产在线视频欧美一区| 国产精品jizz在线观看老狼| 日韩高清电影一区| 日本一级免费视频| 色综合中文字幕| 欧美黄色小说| 91高清视频免费观看| 日韩三级视频| 无码人妻丰满熟妇区96| thepron国产精品| 日韩成人免费在线观看| 精品国产一区二区三区四区四 | 色呦呦日韩精品| 天天操天天操天天干| 隔壁老王国产在线精品| 超碰在线亚洲| 天堂8在线天堂资源bt| 国产aⅴ综合色| 国产无码精品在线观看| 精品国产成人在线影院| 国产777精品精品热热热一区二区| 国产精品久久久久久久久久久久午夜片 | 成人免费视频在线观看| 国产精品久久久久久久久久久久久久久久久久 | 91成人看片片| 成人精品一区二区三区校园激情| 国产精品www网站| 久久日文中文字幕乱码| 97人人爽人人| 一区二区三区毛片| 特黄aaaaaaaaa真人毛片| **欧美日韩vr在线| 免费看成人吃奶视频在线| 簧片在线免费看| 亚洲美女精品一区| 日本高清视频免费看| 热re99久久精品国产66热| 俺要去色综合狠狠| 一级黄色在线播放| 亚洲成人福利片| 黄色av网址在线免费观看| 国产精品视频精品视频| 一精品久久久| 懂色av粉嫩av蜜乳av| 91久久一区二区| 超碰电影在线播放| 国产一区二区三区无遮挡| 免费成人在线网站| 国内偷拍精品视频| 亚洲精品国产品国语在线| 欧美电影免费观看| gogogo免费高清日本写真| 成人免费av资源| 中文区中文字幕免费看| 欧美精品中文字幕一区| 神马香蕉久久| 99日在线视频| 五月天一区二区| 日本在线免费| 久久久人人爽| 黄页网站大全一区二区| 啦啦啦免费高清视频在线观看| 中文字幕亚洲一区在线观看| 97se亚洲| 国产精品久久久毛片| 性感美女久久精品| 日本www在线观看| 久久精品国产综合精品| 国产做a爰片久久毛片| 好吊色在线视频| 色综合男人天堂| 99精品小视频| 丰满圆润老女人hd|