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

RxJava操作符系列三(上)

移動開發(fā) Android
在之前的文章,我們介紹了一些Observable的創(chuàng)建以及數(shù)據(jù)轉(zhuǎn)換的操作符,其中的一些數(shù)據(jù)轉(zhuǎn)換的操作符理解還是有一定的難度的,但是相信如果敲一遍代碼并且修改各種參數(shù)的值,去觀察執(zhí)行的日志,相信還是很容易的理解的。在這篇文章中,我們將介紹一些常見的過濾操作符,在RxJava中過濾操作符也是比較好理解的,好了,讓我們一起繼續(xù)開啟學習之旅吧。

RxJava操作符系列傳送門

  • RxJava操作符源碼

https://github.com/xiehui999/fuseProgram

[[180583]]

前言

在之前的文章,我們介紹了一些Observable的創(chuàng)建以及數(shù)據(jù)轉(zhuǎn)換的操作符,其中的一些數(shù)據(jù)轉(zhuǎn)換的操作符理解還是有一定的難度的,但是相信如果敲一遍代碼并且修改各種參數(shù)的值,去觀察執(zhí)行的日志,相信還是很容易的理解的。在官網(wǎng),每個操作符都給出了圖例,如果你對文字的理解不夠清楚明白,也可以去參考圖示幫助自己理解。在這篇文章中,我們將介紹一些常見的過濾操作符,在RxJava中過濾操作符也是比較好理解的,好了,讓我們一起繼續(xù)開啟學習之旅吧。

Filter

該操作符接收一個Func1參數(shù),我們可以在其中通過運用你自己的判斷條件去判斷我們要過濾的數(shù)據(jù),當數(shù)據(jù)通過判斷條件后返回true表示發(fā)射該項數(shù)據(jù),否則就不發(fā)射,這樣就過濾出了我們想要的數(shù)據(jù)。如下,我們過濾出不能被2整除的數(shù)

  1. Integer[] ints = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 
  2.  
  3.        Observable observable = Observable.from(ints).filter(new Func1<Integer, Boolean>() { 
  4.  
  5.            @Override 
  6.  
  7.            public Boolean call(Integer integer) { 
  8.  
  9.                return integer % 2 != 0;//返回true,就不會過濾掉,會發(fā)射數(shù)據(jù),過濾掉返回false的值 
  10.  
  11.            } 
  12.  
  13.        }); 
  14.  
  15.        Action1 action1 = new Action1<Integer>() { 
  16.  
  17.            @Override 
  18.  
  19.            public void call(Integer i) { 
  20.  
  21.                Log.e(TAG, "call: "+i ); 
  22.  
  23.            } 
  24.  
  25.        }; 
  26.  
  27.        observable.subscribe(action1);  

輸出日志信息

  1. call: 1 
  2.  
  3. call: 3 
  4.  
  5. call: 5 
  6.  
  7. call: 7 
  8.  
  9. call: 9  

ofType

該操作符是filter操作符的一個特殊形式。它過濾一個Observable只返回指定類型的數(shù)據(jù),例如當數(shù)據(jù)源有字符串和int型數(shù)據(jù)時,我們想要過濾出字符串就可以使用這個操作符,如下示例代碼

  1. Observable.just(0, "one", 6, 4, "two", 8, "three", 1, "four", 0) 
  2.  
  3. .ofType(String.class) 
  4.  
  5. .subscribe(new Subscriber<String>() { 
  6.  
  7. @Override 
  8.  
  9. public void onCompleted() { 
  10.  
  11. Log.e(TAG, "onCompleted:ofType "); 
  12.  
  13.  
  14.   
  15.  
  16. @Override 
  17.  
  18. public void onError(Throwable e) { 
  19.  
  20. Log.e(TAG, "onError:ofType "); 
  21.  
  22.  
  23.   
  24.  
  25. @Override 
  26.  
  27. public void onNext(String string) { 
  28.  
  29. Log.e(TAG, "onNext:ofType " + string); 
  30.  
  31.  
  32. });  

輸出日志信息

  1. onNext:ofType one 
  2.  
  3. onNext:ofType two 
  4.  
  5. onNext:ofType three 
  6.  
  7. onNext:ofType four 
  8.  
  9. onCompleted:ofType  

當然除了過濾基本類型的數(shù)據(jù),也可以過濾自定義類型數(shù)據(jù)。

First

如果我們只對Observable發(fā)射的***項數(shù)據(jù),或者滿足某個條件的***項數(shù)據(jù)感興趣,則可以使用First操作符。

  1. Observable.just(10, 11, 12, 13).first().subscribe(new Action1() { 
  2.  
  3.             @Override 
  4.  
  5.             public void call(Integer integer) { 
  6.  
  7.                 Log.e(TAG, integer+""); 
  8.  
  9.             } 
  10.  
  11.         });  

上面日志只打印一個值10,當然我們也可以給first傳一個參數(shù)Fun1,指定一個條件如下

  1. Observable.just(10, 11, 12, 13).first(new Func1<Integer, Boolean>() { 
  2.  
  3.             @Override 
  4.  
  5.             public Boolean call(Integer integer) { 
  6.  
  7.                 return integer > 12; 
  8.  
  9.             } 
  10.  
  11.         }).subscribe(new Action1<Integer>() { 
  12.  
  13.             @Override 
  14.  
  15.             public void call(Integer integer) { 
  16.  
  17.                 Log.e(TAG, integer+""); 
  18.  
  19.             } 
  20.  
  21.         });  

此時輸出的信息就是滿足integer > 12的***項數(shù)據(jù)13。

firstOrDefault

該操作符是first操作符的變形。主要是在沒有發(fā)射任何數(shù)據(jù)時發(fā)射一個你在參數(shù)中指定的默認值。如下,它有有兩個重載方法。

  1. Observable.just(11,12,13).firstOrDefault(10).subscribe(new Action1<Object>() { 
  2.  
  3.             @Override 
  4.  
  5.             public void call(Object o) { 
  6.  
  7.                 Log.e(TAG, o.toString()); 
  8.  
  9.             } 
  10.  
  11.         });  

如果寫成上面的代碼,這個執(zhí)行會和first效果一樣。因為沒有發(fā)射數(shù)據(jù)的時候才用到默認值,那么我們將上面代碼更改如下,使用empty創(chuàng)建一個不發(fā)射任何數(shù)據(jù)但是正常終止的Observable。

  1. Observable.empty().firstOrDefault(10).subscribe(new Action1<Object>() { 
  2.  
  3.             @Override 
  4.  
  5.             public void call(Object o) { 
  6.  
  7.                 Log.e(TAG, o.toString()); 
  8.  
  9.             } 
  10.  
  11.         });  

發(fā)現(xiàn)此時輸出了數(shù)據(jù)10.該操作符還提供了兩個參數(shù)的重載方法firstOrDefault(T defaultValue, Func1 super T, Boolean> predicate)。我們可以增加一個條件。如下示例

  1. Observable.just(10,13,16).firstOrDefault(15, new Func1<Integer, Boolean>() { 
  2.  
  3.             @Override 
  4.  
  5.             public Boolean call(Integer integer) { 
  6.  
  7.                 return integer>20; 
  8.  
  9.             } 
  10.  
  11.         }).subscribe(new Action1<Integer>() { 
  12.  
  13.             @Override 
  14.  
  15.             public void call(Integer integer) { 
  16.  
  17.                 Log.e(TAG, ""+integer); 
  18.  
  19.             } 
  20.  
  21.         });  

此時數(shù)據(jù)源10,13,16都不滿足大于20,則此時將輸出默認值15,如果我們將數(shù)據(jù)源數(shù)據(jù)增加一個值22.那么此時將不再輸出默認值,而是輸出22。

takeFirst

該操作符與first操作符的區(qū)別就是如果原始Observable沒有發(fā)射任何滿足條件的數(shù)據(jù),first會拋出一個NoSuchElementException直接執(zhí)行onError(),而takeFist會返回一個空的Observable(不調(diào)用onNext()但是會調(diào)用onCompleted)

如下面下面示例代碼 

  1. Observable.just(10,11).filter(new Func1<Integer, Boolean>() { 
  2.  
  3.             @Override 
  4.  
  5.             public Boolean call(Integer integer) { 
  6.  
  7.                 return integer>20; 
  8.  
  9.             } 
  10.  
  11.         }).first().subscribe(new Subscriber<Object>() { 
  12.  
  13.   
  14.  
  15.             @Override 
  16.  
  17.             public void onCompleted() { 
  18.  
  19.                 Log.e(TAG, "onCompleted: "); 
  20.  
  21.             } 
  22.  
  23.   
  24.  
  25.             @Override 
  26.  
  27.             public void onError(Throwable e) { 
  28.  
  29.                 Log.e(TAG, "onError: "+e.toString()); 
  30.  
  31.             } 
  32.  
  33.   
  34.  
  35.             @Override 
  36.  
  37.             public void onNext(Object o) { 
  38.  
  39.                 Log.e(TAG, "onNext: "+o.toString()); 
  40.  
  41.             } 
  42.  
  43.         });  

執(zhí)行后輸出的信息如下

  1. onError: java.util.NoSuchElementException: Sequence contains no elements 

若此時用takeFirst

  1. Observable.just(10,11).takeFirst(new Func1<Integer, Boolean>() { 
  2.  
  3.             @Override 
  4.  
  5.             public Boolean call(Integer integer) { 
  6.  
  7.                 Log.e(TAG, "call: takeFirst" ); 
  8.  
  9.                 return integer>30; 
  10.  
  11.             } 
  12.  
  13.         }).subscribe(new Subscriber<Object>() { 
  14.  
  15.   
  16.  
  17.             @Override 
  18.  
  19.             public void onCompleted() { 
  20.  
  21.                 Log.e(TAG, "onCompleted: "); 
  22.  
  23.             } 
  24.  
  25.   
  26.  
  27.             @Override 
  28.  
  29.             public void onError(Throwable e) { 
  30.  
  31.                 Log.e(TAG, "onError: "+e.toString()); 
  32.  
  33.             } 
  34.  
  35.   
  36.  
  37.             @Override 
  38.  
  39.             public void onNext(Object o) { 
  40.  
  41.                 Log.e(TAG, "onNext: "+o.toString()); 
  42.  
  43.             } 
  44.  
  45.         });  

發(fā)現(xiàn)此時不會出現(xiàn)異常,而是執(zhí)行了onCompleted()。

single

如果原始Observable在完成之前不是正好發(fā)射一次數(shù)據(jù),它會拋出一個NoSuchElementException,白話可以理解為發(fā)送數(shù)據(jù)是一項的話輸出此項的值,若是多個數(shù)據(jù)則拋出異常執(zhí)行onError()方法。

如下代碼

  1. Observable.just(10, 11, 12, 13).single().subscribe(new Subscriber<Integer>() { 
  2.  
  3.             @Override 
  4.  
  5.             public void onCompleted() { 
  6.  
  7.                  Log.e(TAG, "onCompleted"); 
  8.  
  9.             } 
  10.  
  11.   
  12.  
  13.             @Override 
  14.  
  15.             public void onError(Throwable e) { 
  16.  
  17.                  Log.e(TAG, "onError"+e.toString()); 
  18.  
  19.             } 
  20.  
  21.   
  22.  
  23.             @Override 
  24.  
  25.             public void onNext(Integer integer) { 
  26.  
  27.                  Log.e(TAG,  integer); 
  28.  
  29.             } 
  30.  
  31.         });  

輸出信息 

  1. onError: java.util.NoSuchElementException: Sequence contains no elements 

如果將上述代碼做下簡單更改

  1. Observable.just(10, 11, 12, 13).filter(new Func1<Integer, Boolean>() { 
  2.  
  3.             @Override 
  4.  
  5.             public Boolean call(Integer integer) { 
  6.  
  7.                 return integer > 12; 
  8.  
  9.             } 
  10.  
  11.         }).subscribe(new Subscriber<Integer>() { 
  12.  
  13.             @Override 
  14.  
  15.             public void onCompleted() { 
  16.  
  17.                  Log.e(TAG, "onCompleted"); 
  18.  
  19.             } 
  20.  
  21.   
  22.  
  23.             @Override 
  24.  
  25.             public void onError(Throwable e) { 
  26.  
  27.                  Log.e(TAG, "onError"+e.toString()); 
  28.  
  29.             } 
  30.  
  31.   
  32.  
  33.             @Override 
  34.  
  35.             public void onNext(Integer integer) { 
  36.  
  37.                  Log.e(TAG,  integer); 
  38.  
  39.             } 
  40.  
  41.         });  

此時會輸出數(shù)據(jù)13,因為此時通過filter后就只有一條數(shù)據(jù)。single也有singleOrDefault(T)和singleOrDefault(T,Func1)兩個變體,具體可以自己代碼測試區(qū)別。

Last

該操作符與first意義相反,若我們只對Observable發(fā)射的***一項數(shù)據(jù),或者滿足某個條件的***一項數(shù)據(jù)感興趣時使用該操作符。

示例代碼

  1. Observable.just(10, 11, 12, 13).last().subscribe(new Action1<Integer>() { 
  2.  
  3.             @Override 
  4.  
  5.             public void call(Integer integer) { 
  6.  
  7.                Log.e(TAG, "call: "+integer); 
  8.  
  9.             } 
  10.  
  11.         });  

執(zhí)行后輸出13.它有一個重載方法可以指定條件,獲取滿足條件的***一項數(shù)據(jù)的。將上面代碼修改如下

  1. Observable.just(10, 11, 12, 13).last(new Func1<Integer, Boolean>() { 
  2.  
  3.             @Override 
  4.  
  5.             public Boolean call(Integer integer) { 
  6.  
  7.                 return integer < 12; 
  8.  
  9.             } 
  10.  
  11.         }).subscribe(new Action1<Integer>() { 
  12.  
  13.             @Override 
  14.  
  15.             public void call(Integer integer) { 
  16.  
  17.                 Log.e(TAG, "call: "+integer); 
  18.  
  19.             } 
  20.  
  21.         });  

此時最終輸出數(shù)據(jù)就是11.該操作符和first一樣也有幾種變體,如lastOrDefault,TakeLast,具體效果可自己測試。

Skip

該操作符是跳過之前的前幾項數(shù)據(jù),然后再發(fā)射數(shù)據(jù)。

  1. Observable.range(1, 10).skip(6).subscribe(new Action1<Integer>() { 
  2.  
  3.             @Override 
  4.  
  5.             public void call(Integer integer) { 
  6.  
  7.                Log.e(TAG, "call: "+integer ); 
  8.  
  9.             } 
  10.  
  11.         });  

輸出日志信息

  1. call: 7 
  2.  
  3. call: 8 
  4.  
  5. call: 9 
  6.  
  7. call: 10  

skip還有兩個重載方法.skip(long time, TimeUnit unit)默認是在computation調(diào)度器上執(zhí)行,如果要有更新UI操作需要通過observeOn方法指定為AndroidSchedulers.mainThread(),當然還有一個重載方法skip(long time, TimeUnit unit, Scheduler scheduler)可以指定調(diào)度器。注意的一點是這兩個重載方法的***個參數(shù)不是跳過的數(shù)據(jù)數(shù)量,指的是時間。

  1. Observable.interval(500, TimeUnit.MILLISECONDS) 
  2.  
  3.                 .skip(2, TimeUnit.SECONDS) 
  4.  
  5.                 .observeOn(AndroidSchedulers.mainThread()) 
  6.  
  7.                 .subscribe(new Subscriber<Long>() { 
  8.  
  9.                     @Override 
  10.  
  11.                     public void onCompleted() { 
  12.  
  13.   
  14.  
  15.                     } 
  16.  
  17.   
  18.  
  19.                     @Override 
  20.  
  21.                     public void onError(Throwable e) { 
  22.  
  23.   
  24.  
  25.                     } 
  26.  
  27.   
  28.  
  29.                     @Override 
  30.  
  31.                     public void onNext(Long aLong) { 
  32.  
  33.                         tv.append("\n" + aLong); 
  34.  
  35.                         if (aLong > 10) { 
  36.  
  37.                             this.unsubscribe(); 
  38.  
  39.                         } 
  40.  
  41.                     } 
  42.  
  43.                 });  

如上代碼,通過interval每隔500毫秒產(chǎn)生一個數(shù)據(jù),通過skip設(shè)定跳過時間為2秒。并且當數(shù)據(jù)大于10時解除訂閱。

skipLast

正好和skip 相反,忽略***產(chǎn)生的n個數(shù)據(jù)項

  1. Observable.range(1, 10).skipLast(6).subscribe(new Action1<Integer>() { 
  2.  
  3.             @Override 
  4.  
  5.             public void call(Integer integer) { 
  6.  
  7.                Log.e(TAG, "call: "+integer ); 
  8.  
  9.             } 
  10.  
  11.         });  

輸出日志信息

  1. call: 1 
  2.  
  3. call: 2 
  4.  
  5. call: 3 
  6.  
  7. call: 4  

接下文 

責任編輯:龐桂玉 來源: 安卓開發(fā)精選
相關(guān)推薦

2016-12-28 09:48:09

AndroidRxJava操作符

2017-01-03 16:12:13

RxJava操作符Android

2016-12-28 09:54:50

AndroidRxJava操作符

2016-11-17 15:35:51

RxJava操作Subscriber

2009-08-19 17:26:28

C# 操作符

2021-10-31 18:59:55

Python操作符用法

2010-07-14 14:55:07

Perl操作符

2009-11-17 10:42:58

PHP操作符

2010-07-19 11:00:24

Perl操作符

2011-04-08 16:26:14

JavaScript

2010-07-14 14:30:31

Perl操作符

2009-09-16 09:09:23

Linq Contai

2009-09-15 17:16:58

LINQ查詢操作符

2010-07-14 14:18:51

Perl操作符

2012-02-06 09:13:23

LINQ

2009-07-21 09:31:00

Scala操作符

2010-01-28 11:16:28

C++操作符

2010-07-13 11:11:39

Perl標量

2009-11-30 16:48:08

PHP操作符

2009-07-14 18:34:22

Jython操作符重載
點贊
收藏

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

国产极品粉嫩福利姬萌白酱 | 黄瓜视频污在线观看| 国产天堂在线播放视频| 99久久久久久99| 国产精品久久久久av| 午夜精品一区二区三区视频| 国产劲爆久久| 欧美在线一区二区三区| 最新av网址在线观看| 午夜福利视频一区二区| 麻豆精品新av中文字幕| 久久免费在线观看| 91狠狠综合久久久久久| 在线精品自拍| 欧美三级日韩三级国产三级| 国产一级大片免费看| 毛片网站在线| 国产成人av一区| 国产乱人伦真实精品视频| 久久午夜无码鲁丝片午夜精品| 久操精品在线| 亚洲成人网久久久| 五月天婷婷影视| 我爱我色成人网| 亚洲线精品一区二区三区| 色噜噜狠狠色综合网| 日韩一级片免费在线观看| 美女一区二区三区| 日韩美女中文字幕| 日本三级中文字幕| 欧美激情1区2区| 色婷婷综合成人av| 国产jk精品白丝av在线观看| 中文字幕一区二区三区中文字幕 | 亚洲天堂网视频| 国产精品亚洲产品| 欧美精品在线视频观看| 国产又粗又猛又爽又黄的视频四季| 欧美三级电影在线| 日韩精品一区二区三区蜜臀| 伊人影院综合在线| 中文.日本.精品| 色综合网站在线| 欧美丰满熟妇bbbbbb百度| 日韩电影免费观看| 亚洲另类中文字| 久久免费看毛片| 日本中文字幕视频在线| 欧美国产精品一区二区| 欧美xxxx黑人又粗又长密月 | 欧美va视频| 欧美日韩亚洲视频| 国产91在线视频观看| 91www在线| 一区二区欧美精品| 欧美乱做爰xxxⅹ久久久| 中文字幕在线三区| 亚洲精品一二三四区| 中国老女人av| 97影院秋霞午夜在线观看| 最新成人av在线| 中文字幕色呦呦| 肉体视频在线| 亚洲成人手机在线| 国产精品宾馆在线精品酒店| 三级在线看中文字幕完整版| 岛国av在线不卡| 日av中文字幕| 久久精品国产福利| 欧美一级免费大片| 国产a√精品区二区三区四区| 视频一区中文字幕精品| 亚洲精品在线观看视频| 亚洲精品乱码久久| 国产一区二区三区四区| 中文字幕亚洲欧美日韩高清| 亚洲 欧美 变态 另类 综合| 亚洲欧美综合| 91国产精品视频在线| 69视频免费在线观看| 日韩中文字幕1| 国产精品一区久久久| 99热精品在线播放| 97se亚洲国产综合自在线| 日本在线观看一区二区| 黄色在线观看网站| 午夜精品影院在线观看| 日本久久精品一区二区| 国产一区二区三区国产精品| 欧美精品一区二区三区在线| 中文字幕丰满乱子伦无码专区| 日韩欧美一区免费| 欧美激情在线观看| 久久这里只有精品9| 国产精品一二三在| 欧美精品一区在线| 尤物在线网址| 91久久一区二区| 69久久精品无码一区二区| 免费福利视频一区| 神马久久桃色视频| 中文字幕亚洲高清| 国产一区二区三区黄视频| 精品一区二区日本| 含羞草www国产在线视频| 午夜一区二区三区在线观看| www.日本一区| 国产一区调教| 久久天天躁狠狠躁夜夜躁| 国产香蕉视频在线| 国产在线一区二区综合免费视频| 久久草.com| 国产午夜精品久久久久免费视| 狠狠躁夜夜躁人人爽天天天天97| 亚洲综合在线一区二区| 国产综合久久久| 国模视频一区二区| 91亚洲国产成人久久精品麻豆| 99久久综合色| 成人污网站在线观看| 高清在线一区| 亚洲精品一区av在线播放| 欧美精品xxxxx| 久久国产免费看| 日本精品免费| 在线能看的av网址| 亚洲第一综合天堂另类专| 亚洲熟女毛茸茸| 日本最新不卡在线| 蜜桃av噜噜一区二区三| 久草在线新免费首页资源站| 6080国产精品一区二区| 久久日免费视频| 午夜亚洲影视| 黑人巨大精品欧美一区二区小视频| 麻豆免费在线观看| 欧美视频在线播放| 国产精品久久久久无码av色戒| 亚洲视频福利| 99久久一区三区四区免费| 免费a级人成a大片在线观看| 欧美三级日韩三级| 日本高清黄色片| 日韩电影在线观看一区| 欧美日韩成人一区二区三区| 亚洲优女在线| 日韩高清av一区二区三区| 黄色激情视频在线观看| 本田岬高潮一区二区三区| 国产精品视频二| 一区二区网站| 欧美激情在线狂野欧美精品| 韩国av在线免费观看| 一区二区三区不卡视频| 污污免费在线观看| 99成人免费视频| 九色综合日本| 唐人社导航福利精品| 亚洲午夜未删减在线观看| 无码视频一区二区三区| 中文无字幕一区二区三区 | 亚洲精品二三区| www日韩精品| 久久久精品中文字幕麻豆发布| 91av俱乐部| 欧美oldwomenvideos| 成人免费直播live| 啪啪免费视频一区| 日韩黄色高清视频| japanese国产在线观看| 中文字幕欧美激情| 伦伦影院午夜理论片| 亚洲国产网站| 日本精品一区二区三区视频| 成人h在线观看| 欧美插天视频在线播放| 黄色一级大片在线免费看国产| 欧美性生交xxxxx久久久| 人妻少妇无码精品视频区| 日韩高清电影一区| 妞干网这里只有精品| 久久香蕉精品香蕉| 国产精品久久久久久久久久ktv| 国产精品扒开做爽爽爽的视频| 欧美sm极限捆绑bd| 国产精品久久久久久久久夜色| 国产精品传媒在线| 看全色黄大色黄女片18| 水野朝阳av一区二区三区| 做爰高潮hd色即是空| 久久久久久毛片免费看 | 国产一级爱c视频| 国产精品日韩精品中文字幕| 成人做爽爽免费视频| 爱看av在线| 中文字幕亚洲欧美一区二区三区| 精品女同一区二区三区| 日本精品视频一区二区三区| 欧美高清视频一区二区三区| 91看片淫黄大片一级在线观看| 黄色一级片免费的| 亚洲少妇一区| 女同性恋一区二区| 国产一区二区观看| 国产伦精品一区二区三区高清版| www成人在线视频| 久久久久亚洲精品国产| 欧美69xxxx| 亚洲天堂av图片| 成人精品在线播放| 欧美日韩1区2区| 欧美brazzers| 精品久久香蕉国产线看观看亚洲| 人人澡人人澡人人看| 久久久久久久久伊人| 中文字幕18页| 国产又粗又猛又爽又黄91精品| 欧美日韩在线不卡视频| 国产精品二区影院| 中文字幕在线中文字幕日亚韩一区 | 六月婷婷激情综合| 成人在线亚洲| 欧美三日本三级少妇三99| 成人爽a毛片免费啪啪红桃视频| 国产一区二区香蕉| 久久精品女人天堂av免费观看| 久久久久久久久久久人体| 动漫一区在线| 色999日韩欧美国产| 国产69久久| 亚洲欧美一区二区激情| 五十路在线视频| 亚洲国内精品在线| 国产77777| 日韩精品中文字幕在线一区| 国产伦理一区二区| 777欧美精品| 亚洲综合一区中| 欧美三区在线观看| 一区二区视频免费| 欧美色欧美亚洲另类二区| 中文字幕欧美在线观看| 在线中文字幕一区| 黄色av网站免费| 日本道色综合久久| 国产精品成人久久久| 在线观看一区不卡| 伊人免费在线观看| 欧美精品久久99| 国产日韩在线观看一区| 日韩一区二区影院| www.国产视频| 亚洲精品在线免费观看视频| 神马午夜在线观看| 亚洲精品网站在线播放gif| 青青色在线视频| 亚洲视频第一页| 在线播放麻豆| 久久综合伊人77777尤物| 18+视频在线观看| 欧美激情欧美激情| 美女网站在线看| 国产xxx69麻豆国语对白| av成人免费看| 91亚洲精品久久久| 大香伊人久久精品一区二区| 九九九九精品| 成人三级视频| 亚洲一区 在线播放| 日韩天天综合| 自拍偷拍 国产| 国产盗摄一区二区三区| 国产真实乱人偷精品| 国产清纯在线一区二区www| 很污很黄的网站| 亚洲无线码一区二区三区| 国产精品视频久久久久久久| 91高清视频在线| 国产精品主播一区二区| 精品日韩99亚洲| 麻豆app在线观看| 久久色在线播放| av成人 com a| 国产精品青草久久久久福利99| www.久久热| 欧美日本韩国在线| 中国精品18videos性欧美| 无罩大乳的熟妇正在播放| 免费在线观看成人| 中文字幕天堂av| 国产精品伦一区二区三级视频| 久久99久久98精品免观看软件| 欧美性猛交xxxx免费看| 国产精品怡红院| 亚洲天堂男人天堂| 国产一线二线在线观看 | 欧美日本三级| 日韩精品第一页| 激情五月***国产精品| 麻豆三级在线观看| a美女胸又www黄视频久久| jizz日本在线播放| 狠狠爱在线视频一区| 国产成人精品无码高潮| 国产亚洲人成a一在线v站| 丰乳肥臀在线| 91理论片午午论夜理片久久| 妖精视频一区二区三区免费观看| 欧洲xxxxx| 日本伊人精品一区二区三区观看方式| 中文字幕在线国产| 国产精品私人自拍| 久久久久女人精品毛片九一| 日韩欧美国产wwwww| 在线激情网站| 国产aⅴ夜夜欢一区二区三区| 成人性生交大片免费看中文视频 | 91官网在线| 欧美一级片一区| 成人在线超碰| 男女啪啪免费观看| 久久99精品一区二区三区三区| 色噜噜日韩精品欧美一区二区| 亚洲成人激情综合网| 国产特级黄色片| 日韩中文字幕亚洲| 国产91欧美| 日韩一区二区电影在线观看| 亚洲欧美清纯在线制服| 中文字幕精品视频在线| 一区二区欧美国产| www.日本在线观看| 美女av一区二区三区| 亚洲欧洲专区| 一区二区三区电影| 开心九九激情九九欧美日韩精美视频电影 | 9999在线视频| 亚洲free嫩bbb| 久久精品欧美一区| 看看黄色一级片| 亚洲欧洲av另类| 国产又粗又猛又黄又爽| 色偷偷88888欧美精品久久久| 亚洲a∨精品一区二区三区导航| 久久久久久久久久久一区| 一区二区三区国产在线| 好吊色视频一区二区三区| 亚洲成人777| 亚洲欧美日韩精品永久在线| 性欧美办公室18xxxxhd| 欧美调教网站| 日韩黄色片视频| 久久久综合九色合综国产精品| 国产剧情在线视频| 亚洲欧美日韩高清| 成人精品一区二区三区电影| 亚洲一区不卡在线| 国产麻豆日韩欧美久久| 久久综合久久鬼| 日韩电影在线观看中文字幕| 免费观看欧美大片| 色姑娘综合网| 国模大尺度一区二区三区| 欧美日韩精品一区二区三区视频播放 | 粉嫩欧美一区二区三区高清影视| 久久久精品视频在线| 亚洲精品国产综合久久| 九九热线视频只有这里最精品| 日韩电影免费观看在| 久久精品国产亚洲a| 午夜免费激情视频| 亚洲高清久久网| 日韩中文影院| 裸体裸乳免费看| 成人久久久精品乱码一区二区三区 | 亚洲欧美日韩中文字幕一区二区三区| 精品国产九九九| 欧洲亚洲在线视频| 日韩.com| 熟女人妻一区二区三区免费看| 岛国视频午夜一区免费在线观看 | 中文字幕欧美日本乱码一线二线| 97人妻精品一区二区三区软件| 欧美精品18videosex性欧美| 天堂在线精品| 国产传媒免费观看| 精品久久久久久久久久久| 一级毛片视频在线| 国产精品国产精品国产专区蜜臀ah| 麻豆亚洲精品| 天天综合天天做| 亚洲裸体xxxx| 久久伦理中文字幕| 国产真实乱子伦| 亚洲人成网站精品片在线观看| 性xxxfllreexxx少妇| 国产美女搞久久| 99视频精品| 丝袜 亚洲 另类 欧美 重口 | 精品人妻无码一区二区三区|