国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

20 個實例玩轉(zhuǎn) Java 8 Stream

共 29124字,需瀏覽 59分鐘

 ·

2021-05-02 06:43

先貼上幾個案例,水平高超的同學可以挑戰(zhàn)一下:

1. 從員工集合中篩選出salary大于8000的員工,并放置到新的集合里。
2. 統(tǒng)計員工的最高薪資、平均薪資、薪資之和。
3. 將員工按薪資從高到低排序,同樣薪資者年齡小者在前。
4. 將員工按性別分類,將員工按性別和地區(qū)分類,將員工按薪資是否高于8000分為兩部分。
用傳統(tǒng)的迭代處理也不是很難,但代碼就顯得冗余了,跟Stream相比高下立判。Java 8 是一個非常成功的版本,這個版本新增的Stream,配合同版本出現(xiàn)的 Lambda ,給我們操作集合(Collection)提供了極大的便利。

那么什么是Stream
Stream將要處理的元素集合看作一種流,在流的過程中,借助Stream API對流中的元素進行操作,比如:篩選、排序、聚合等。
Stream可以由數(shù)組或集合創(chuàng)建,對流的操作分為兩種:

1. 中間操作,每次返回一個新的流,可以有多個。

2. 終端操作,每個流只能進行一次終端操作,終端操作結(jié)束后流無法再次使用。終端操作會產(chǎn)生一個新的集合或值。

另外,Stream有幾個特性:

1. stream不存儲數(shù)據(jù),而是按照特定的規(guī)則對數(shù)據(jù)進行計算,一般會輸出結(jié)果。

2. stream不會改變數(shù)據(jù)源,通常情況下會產(chǎn)生一個新的集合或一個值。

3. stream具有延遲執(zhí)行特性,只有調(diào)用終端操作時,中間操作才會執(zhí)行。

Stream可以通過集合數(shù)組創(chuàng)建。
1、通過 java.util.Collection.stream() 方法用集合創(chuàng)建流
List<String> list = Arrays.asList("a", "b", "c");
// 創(chuàng)建一個順序流
Stream<String> stream = list.stream();
// 創(chuàng)建一個并行流
Stream<String> parallelStream = list.parallelStream();
2、使用java.util.Arrays.stream(T[] array)方法用數(shù)組創(chuàng)建流
int[] array={1,3,5,6,8};
IntStream stream = Arrays.stream(array);
3、使用Stream的靜態(tài)方法:of()、iterate()、generate()
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);

Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 3).limit(4);
stream2.forEach(System.out::println);

Stream<Double> stream3 = Stream.generate(Math::random).limit(3);
stream3.forEach(System.out::println);
輸出結(jié)果:
0 3 6 9
0.6796156909271994
0.1914314208854283
0.8116932592396652
streamparallelStream的簡單區(qū)分: stream是順序流,由主線程按順序?qū)α鲌?zhí)行操作,而parallelStream是并行流,內(nèi)部以多線程并行執(zhí)行的方式對流進行操作,但前提是流中的數(shù)據(jù)處理沒有順序要求。例如篩選集合中的奇數(shù),兩者的處理不同之處:

如果流中的數(shù)據(jù)量足夠大,并行流可以加快處速度。除了直接創(chuàng)建并行流,還可以通過parallel()把順序流轉(zhuǎn)換成并行流:

Optional<Integer> findFirst = list.stream().parallel().filter(x->x>6).findFirst();

在使用stream之前,先理解一個概念:Optional

Optional類是一個可以為null的容器對象。如果值存在則isPresent()方法會返回true,調(diào)用get()方法會返回該對象。
更詳細說明請見:菜鳥教程Java 8 Optional類
接下來,大批代碼向你襲來!我將用20個案例將Stream的使用整得明明白白,只要跟著敲一遍代碼,就能很好地掌握。

案例使用的員工類

這是后面案例中使用的員工類:
List<Person> personList = new ArrayList<Person>();
personList.add(new Person("Tom", 8900, "male", "New York"));
personList.add(new Person("Jack", 7000, "male", "Washington"));
personList.add(new Person("Lily", 7800, "female", "Washington"));
personList.add(new Person("Anni", 8200, "female", "New York"));
personList.add(new Person("Owen", 9500, "male", "New York"));
personList.add(new Person("Alisa", 7900, "female", "New York"));

class Person {
  private String name; // 姓名
  private int salary; // 薪資
  private int age; // 年齡
  private String sex; //性別
  private String area; // 地區(qū)

  // 構(gòu)造方法
  public Person(String name, int salary, int age,String sex,String area) {
    this.name = name;
    this.salary = salary;
    this.age = age;
    this.sex = sex;
    this.area = area;
  }
  // 省略了get和set,請自行添加

}


3.1 遍歷/匹配(foreach/find/match)

Stream也是支持類似集合的遍歷和匹配元素的,只是Stream中的元素是以Optional類型存在的。Stream的遍歷、匹配非常簡單。

// import已省略,請自行添加,后面代碼亦是

public class StreamTest {
  public static void main(String[] args) {
        List<Integer> list = Arrays.asList(7, 6, 9, 3, 8, 2, 1);

        // 遍歷輸出符合條件的元素
        list.stream().filter(x -> x > 6).forEach(System.out::println);
        // 匹配第一個
        Optional<Integer> findFirst = list.stream().filter(x -> x > 6).findFirst();
        // 匹配任意(適用于并行流)
        Optional<Integer> findAny = list.parallelStream().filter(x -> x > 6).findAny();
        // 是否包含符合特定條件的元素
        boolean anyMatch = list.stream().anyMatch(x -> x < 6);
        System.out.println("匹配第一個值:" + findFirst.get());
        System.out.println("匹配任意一個值:" + findAny.get());
        System.out.println("是否存在大于6的值:" + anyMatch);
    }
}

3.2 篩選(filter)

篩選,是按照一定的規(guī)則校驗流中的元素,將符合條件的元素提取到新的流中的操作。

案例一:篩選出Integer集合中大于7的元素,并打印出來
public class StreamTest {
  public static void main(String[] args) {
    List<Integer> list = Arrays.asList(6, 7, 3, 8, 1, 2, 9);
    Stream<Integer> stream = list.stream();
    stream.filter(x -> x > 7).forEach(System.out::println);
  }
}
預期結(jié)果:
8 9
案例二:篩選員工中工資高于8000的人,并形成新的集合。 形成新集合依賴collect(收集),后文有詳細介紹。
public class StreamTest {
  public static void main(String[] args) {
    List<Person> personList = new ArrayList<Person>();
    personList.add(new Person("Tom", 8900, 23, "male", "New York"));
    personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
    personList.add(new Person("Lily", 7800, 21, "female", "Washington"));
    personList.add(new Person("Anni", 8200, 24, "female", "New York"));
    personList.add(new Person("Owen", 9500, 25, "male", "New York"));
    personList.add(new Person("Alisa", 7900, 26, "female", "New York"));

    List<String> fiterList = personList.stream().filter(x -> x.getSalary() > 8000).map(Person::getName)
        .collect(Collectors.toList());
    System.out.print("高于8000的員工姓名:" + fiterList);
  }
}
運行結(jié)果:
高于8000的員工姓名:[Tom, Anni, Owen]


3.3 聚合(max/min/count)

max、min、count這些字眼你一定不陌生,沒錯,在mysql中我們常用它們進行數(shù)據(jù)統(tǒng)計。Java stream中也引入了這些概念和用法,極大地方便了我們對集合、數(shù)組的數(shù)據(jù)統(tǒng)計工作。

案例一:獲取String集合中最長的元素。
public class StreamTest {
  public static void main(String[] args) {
    List<String> list = Arrays.asList("adnm", "admmt", "pot", "xbangd", "weoujgsd");

    Optional<String> max = list.stream().max(Comparator.comparing(String::length));
    System.out.println("最長的字符串:" + max.get());
  }
}
輸出結(jié)果:
最長的字符串:weoujgsd
案例二:獲取Integer集合中的最大值。
public class StreamTest {
  public static void main(String[] args) {
    List<Integer> list = Arrays.asList(7, 6, 9, 4, 11, 6);

    // 自然排序
    Optional<Integer> max = list.stream().max(Integer::compareTo);
    // 自定義排序
    Optional<Integer> max2 = list.stream().max(new Comparator<Integer>() {
      @Override
      public int compare(Integer o1, Integer o2) {
        return o1.compareTo(o2);
      }
    });
    System.out.println("自然排序的最大值:" + max.get());
    System.out.println("自定義排序的最大值:" + max2.get());
  }
}
輸出結(jié)果:
自然排序的最大值:11
自定義排序的最大值:11
案例三:獲取員工工資最高的人。
public class StreamTest {
  public static void main(String[] args) {
    List<Person> personList = new ArrayList<Person>();
    personList.add(new Person("Tom", 8900, 23, "male", "New York"));
    personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
    personList.add(new Person("Lily", 7800, 21, "female", "Washington"));
    personList.add(new Person("Anni", 8200, 24, "female", "New York"));
    personList.add(new Person("Owen", 9500, 25, "male", "New York"));
    personList.add(new Person("Alisa", 7900, 26, "female", "New York"));

    Optional<Person> max = personList.stream().max(Comparator.comparingInt(Person::getSalary));
    System.out.println("員工工資最大值:" + max.get().getSalary());
  }
}
輸出結(jié)果:
員工工資最大值:9500
案例四:計算Integer集合中大于6的元素的個數(shù)。
import java.util.Arrays;
import java.util.List;

public class StreamTest {
  public static void main(String[] args) {
    List<Integer> list = Arrays.asList(7, 6, 4, 8, 2, 11, 9);

    long count = list.stream().filter(x -> x > 6).count();
    System.out.println("list中大于6的元素個數(shù):" + count);
  }
}
輸出結(jié)果:
list中大于6的元素個數(shù):4

3.4 映射(map/flatMap)

映射,可以將一個流的元素按照一定的映射規(guī)則映射到另一個流中。分為mapflatMap
  • map:接收一個函數(shù)作為參數(shù),該函數(shù)會被應(yīng)用到每個元素上,并將其映射成一個新的元素。
  • flatMap:接收一個函數(shù)作為參數(shù),將流中的每個值都換成另一個流,然后把所有流連接成一個流。


案例一:英文字符串數(shù)組的元素全部改為大寫。整數(shù)數(shù)組每個元素+3。
public class StreamTest {
  public static void main(String[] args) {
    String[] strArr = { "abcd", "bcdd", "defde", "fTr" };
    List<String> strList = Arrays.stream(strArr).map(String::toUpperCase).collect(Collectors.toList());

    List<Integer> intList = Arrays.asList(1, 3, 5, 7, 9, 11);
    List<Integer> intListNew = intList.stream().map(x -> x + 3).collect(Collectors.toList());

    System.out.println("每個元素大寫:" + strList);
    System.out.println("每個元素+3:" + intListNew);
  }
}
輸出結(jié)果:
每個元素大寫:[ABCD, BCDD, DEFDE, FTR]
每個元素+3:[4, 6, 8, 10, 12, 14]
案例二:將員工的薪資全部增加1000。
public class StreamTest {
  public static void main(String[] args) {
    List<Person> personList = new ArrayList<Person>();
    personList.add(new Person("Tom", 8900, 23, "male", "New York"));
    personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
    personList.add(new Person("Lily", 7800, 21, "female", "Washington"));
    personList.add(new Person("Anni", 8200, 24, "female", "New York"));
    personList.add(new Person("Owen", 9500, 25, "male", "New York"));
    personList.add(new Person("Alisa", 7900, 26, "female", "New York"));

    // 不改變原來員工集合的方式
    List<Person> personListNew = personList.stream().map(person -> {
      Person personNew = new Person(person.getName(), 0, 0, null, null);
      personNew.setSalary(person.getSalary() + 10000);
      return personNew;
    }).collect(Collectors.toList());
    System.out.println("一次改動前:" + personList.get(0).getName() + "-->" + personList.get(0).getSalary());
    System.out.println("一次改動后:" + personListNew.get(0).getName() + "-->" + personListNew.get(0).getSalary());

    // 改變原來員工集合的方式
    List<Person> personListNew2 = personList.stream().map(person -> {
      person.setSalary(person.getSalary() + 10000);
      return person;
    }).collect(Collectors.toList());
    System.out.println("二次改動前:" + personList.get(0).getName() + "-->" + personListNew.get(0).getSalary());
    System.out.println("二次改動后:" + personListNew2.get(0).getName() + "-->" + personListNew.get(0).getSalary());
  }
}
輸出結(jié)果:
一次改動前:Tom–>8900
一次改動后:Tom–>18900
二次改動前:Tom–>18900
二次改動后:Tom–>18900
案例三:將兩個字符數(shù)組合并成一個新的字符數(shù)組。
public class StreamTest {
  public static void main(String[] args) {
    List<String> list = Arrays.asList("m,k,l,a", "1,3,5,7");
    List<String> listNew = list.stream().flatMap(s -> {
      // 將每個元素轉(zhuǎn)換成一個stream
      String[] split = s.split(",");
      Stream<String> s2 = Arrays.stream(split);
      return s2;
    }).collect(Collectors.toList());

    System.out.println("處理前的集合:" + list);
    System.out.println("處理后的集合:" + listNew);
  }
}
輸出結(jié)果:
處理前的集合:[m-k-l-a, 1-3-5]
處理后的集合:[m, k, l, a, 1, 3, 5]

3.5 歸約(reduce)

歸約,也稱縮減,顧名思義,是把一個流縮減成一個值,能實現(xiàn)對集合求和、求乘積和求最值操作。

案例一:求Integer集合的元素之和、乘積和最大值。
public class StreamTest {
  public static void main(String[] args) {
    List<Integer> list = Arrays.asList(1, 3, 2, 8, 11, 4);
    // 求和方式1
    Optional<Integer> sum = list.stream().reduce((x, y) -> x + y);
    // 求和方式2
    Optional<Integer> sum2 = list.stream().reduce(Integer::sum);
    // 求和方式3
    Integer sum3 = list.stream().reduce(0, Integer::sum);
    
    // 求乘積
    Optional<Integer> product = list.stream().reduce((x, y) -> x * y);

    // 求最大值方式1
    Optional<Integer> max = list.stream().reduce((x, y) -> x > y ? x : y);
    // 求最大值寫法2
    Integer max2 = list.stream().reduce(1, Integer::max);

    System.out.println("list求和:" + sum.get() + "," + sum2.get() + "," + sum3);
    System.out.println("list求積:" + product.get());
    System.out.println("list求和:" + max.get() + "," + max2);
  }
}
輸出結(jié)果:
list求和:29,29,29
list求積:2112
list求和:11,11
案例二:求所有員工的工資之和和最高工資。
public class StreamTest {
  public static void main(String[] args) {
    List<Person> personList = new ArrayList<Person>();
    personList.add(new Person("Tom", 8900, 23, "male", "New York"));
    personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
    personList.add(new Person("Lily", 7800, 21, "female", "Washington"));
    personList.add(new Person("Anni", 8200, 24, "female", "New York"));
    personList.add(new Person("Owen", 9500, 25, "male", "New York"));
    personList.add(new Person("Alisa", 7900, 26, "female", "New York"));

    // 求工資之和方式1
    Optional<Integer> sumSalary = personList.stream().map(Person::getSalary).reduce(Integer::sum);
    // 求工資之和方式2
    Integer sumSalary2 = personList.stream().reduce(0, (sum, p) -> sum += p.getSalary(),
        (sum1, sum2) -> sum1 + sum2);
    // 求工資之和方式3
    Integer sumSalary3 = personList.stream().reduce(0, (sum, p) -> sum += p.getSalary(), Integer::sum);

    // 求最高工資方式1
    Integer maxSalary = personList.stream().reduce(0, (max, p) -> max > p.getSalary() ? max : p.getSalary(),
        Integer::max);
    // 求最高工資方式2
    Integer maxSalary2 = personList.stream().reduce(0, (max, p) -> max > p.getSalary() ? max : p.getSalary(),
        (max1, max2) -> max1 > max2 ? max1 : max2);

    System.out.println("工資之和:" + sumSalary.get() + "," + sumSalary2 + "," + sumSalary3);
    System.out.println("最高工資:" + maxSalary + "," + maxSalary2);
  }
}
輸出結(jié)果:
工資之和:49300,49300,49300
最高工資:9500,9500

3.6 收集(collect)

collect,收集,可以說是內(nèi)容最繁多、功能最豐富的部分了。從字面上去理解,就是把一個流收集起來,最終可以是收集成一個值也可以收集成一個新的集合。
collect主要依賴java.util.stream.Collectors類內(nèi)置的靜態(tài)方法。

3.6.1 歸集(toList/toSet/toMap)

因為流不存儲數(shù)據(jù),那么在流中的數(shù)據(jù)完成處理后,需要將流中的數(shù)據(jù)重新歸集到新的集合里。toList、toSettoMap比較常用,另外還有toCollection、toConcurrentMap等復雜一些的用法。
下面用一個案例演示toList、toSettoMap
public class StreamTest {
  public static void main(String[] args) {
    List<Integer> list = Arrays.asList(1, 6, 3, 4, 6, 7, 9, 6, 20);
    List<Integer> listNew = list.stream().filter(x -> x % 2 == 0).collect(Collectors.toList());
    Set<Integer> set = list.stream().filter(x -> x % 2 == 0).collect(Collectors.toSet());

    List<Person> personList = new ArrayList<Person>();
    personList.add(new Person("Tom", 8900, 23, "male", "New York"));
    personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
    personList.add(new Person("Lily", 7800, 21, "female", "Washington"));
    personList.add(new Person("Anni", 8200, 24, "female", "New York"));
    
    Map<?, Person> map = personList.stream().filter(p -> p.getSalary() > 8000)
        .collect(Collectors.toMap(Person::getName, p -> p));
    System.out.println("toList:" + listNew);
    System.out.println("toSet:" + set);
    System.out.println("toMap:" + map);
  }
}
運行結(jié)果:
toList:[6, 4, 6, 6, 20]
toSet:[4, 20, 6]
toMap:{Tom=mutest.Person@5fd0d5ae, Anni=mutest.Person@2d98a335}

3.6.2 統(tǒng)計(count/averaging)

Collectors提供了一系列用于數(shù)據(jù)統(tǒng)計的靜態(tài)方法:
  • 計數(shù):count
  • 平均值:averagingIntaveragingLongaveragingDouble
  • 最值:maxBy、minBy
  • 求和:summingInt、summingLong、summingDouble
  • 統(tǒng)計以上所有:summarizingInt、summarizingLong、summarizingDouble
案例:統(tǒng)計員工人數(shù)、平均工資、工資總額、最高工資。
public class StreamTest {
  public static void main(String[] args) {
    List<Person> personList = new ArrayList<Person>();
    personList.add(new Person("Tom", 8900, 23, "male", "New York"));
    personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
    personList.add(new Person("Lily", 7800, 21, "female", "Washington"));

    // 求總數(shù)
    Long count = personList.stream().collect(Collectors.counting());
    // 求平均工資
    Double average = personList.stream().collect(Collectors.averagingDouble(Person::getSalary));
    // 求最高工資
    Optional<Integer> max = personList.stream().map(Person::getSalary).collect(Collectors.maxBy(Integer::compare));
    // 求工資之和
    Integer sum = personList.stream().collect(Collectors.summingInt(Person::getSalary));
    // 一次性統(tǒng)計所有信息
    DoubleSummaryStatistics collect = personList.stream().collect(Collectors.summarizingDouble(Person::getSalary));

    System.out.println("員工總數(shù):" + count);
    System.out.println("員工平均工資:" + average);
    System.out.println("員工工資總和:" + sum);
    System.out.println("員工工資所有統(tǒng)計:" + collect);
  }
}
運行結(jié)果:
員工總數(shù):3
員工平均工資:7900.0
員工工資總和:23700
員工工資所有統(tǒng)計:DoubleSummaryStatistics{count=3, sum=23700.000000,min=7000.000000, average=7900.000000, max=8900.000000}

3.6.3 分組(partitioningBy/groupingBy)

  • 分區(qū):將stream按條件分為兩個Map,比如員工按薪資是否高于8000分為兩部分。
  • 分組:將集合分為多個Map,比如員工按性別分組。有單級分組和多級分組。


案例:將員工按薪資是否高于8000分為兩部分;將員工按性別和地區(qū)分組
public class StreamTest {
  public static void main(String[] args) {
    List<Person> personList = new ArrayList<Person>();
    personList.add(new Person("Tom", 8900, "male", "New York"));
    personList.add(new Person("Jack", 7000, "male", "Washington"));
    personList.add(new Person("Lily", 7800, "female", "Washington"));
    personList.add(new Person("Anni", 8200, "female", "New York"));
    personList.add(new Person("Owen", 9500, "male", "New York"));
    personList.add(new Person("Alisa", 7900, "female", "New York"));

    // 將員工按薪資是否高于8000分組
        Map<Boolean, List<Person>> part = personList.stream().collect(Collectors.partitioningBy(x -> x.getSalary() > 8000));
        // 將員工按性別分組
        Map<String, List<Person>> group = personList.stream().collect(Collectors.groupingBy(Person::getSex));
        // 將員工先按性別分組,再按地區(qū)分組
        Map<String, Map<String, List<Person>>> group2 = personList.stream().collect(Collectors.groupingBy(Person::getSex, Collectors.groupingBy(Person::getArea)));
        System.out.println("員工按薪資是否大于8000分組情況:" + part);
        System.out.println("員工按性別分組情況:" + group);
        System.out.println("員工按性別、地區(qū):" + group2);
  }
}
輸出結(jié)果:
員工按薪資是否大于8000分組情況:{false=[mutest.Person@2d98a335, mutest.Person@16b98e56, mutest.Person@7ef20235], true=[mutest.Person@27d6c5e0, mutest.Person@4f3f5b24, mutest.Person@15aeb7ab]}
員工按性別分組情況:{female=[mutest.Person@16b98e56, mutest.Person@4f3f5b24, mutest.Person@7ef20235], male=[mutest.Person@27d6c5e0, mutest.Person@2d98a335, mutest.Person@15aeb7ab]}
員工按性別、地區(qū):{female={New York=[mutest.Person@4f3f5b24, mutest.Person@7ef20235], Washington=[mutest.Person@16b98e56]}, male={New York=[mutest.Person@27d6c5e0, mutest.Person@15aeb7ab], Washington=[mutest.Person@2d98a335]}}


3.6.4 接合(joining)

joining可以將stream中的元素用特定的連接符(沒有的話,則直接連接)連接成一個字符串。
public class StreamTest {
  public static void main(String[] args) {
    List<Person> personList = new ArrayList<Person>();
    personList.add(new Person("Tom", 8900, 23, "male", "New York"));
    personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
    personList.add(new Person("Lily", 7800, 21, "female", "Washington"));

    String names = personList.stream().map(p -> p.getName()).collect(Collectors.joining(","));
    System.out.println("所有員工的姓名:" + names);
    List<String> list = Arrays.asList("A", "B", "C");
    String string = list.stream().collect(Collectors.joining("-"));
    System.out.println("拼接后的字符串:" + string);
  }
}
運行結(jié)果:
所有員工的姓名:Tom,Jack,Lily
拼接后的字符串:A-B-C


3.6.5 歸約(reducing)

Collectors類提供的reducing方法,相比于stream本身的reduce方法,增加了對自定義歸約的支持。
public class StreamTest {
  public static void main(String[] args) {
    List<Person> personList = new ArrayList<Person>();
    personList.add(new Person("Tom", 8900, 23, "male", "New York"));
    personList.add(new Person("Jack", 7000, 25, "male", "Washington"));
    personList.add(new Person("Lily", 7800, 21, "female", "Washington"));

    // 每個員工減去起征點后的薪資之和(這個例子并不嚴謹,但一時沒想到好的例子)
    Integer sum = personList.stream().collect(Collectors.reducing(0, Person::getSalary, (i, j) -> (i + j - 5000)));
    System.out.println("員工扣稅薪資總和:" + sum);

    // stream的reduce
    Optional<Integer> sum2 = personList.stream().map(Person::getSalary).reduce(Integer::sum);
    System.out.println("員工薪資總和:" + sum2.get());
  }
}
運行結(jié)果:
員工扣稅薪資總和:8700
員工薪資總和:23700


3.7 排序(sorted)

sorted,中間操作。有兩種排序:
  • sorted():自然排序,流中元素需實現(xiàn)Comparable接口
  • sorted(Comparator com):Comparator排序器自定義排序
案例:將員工按工資由高到低(工資一樣則按年齡由大到?。┡判?/strong>
public class StreamTest {
  public static void main(String[] args) {
    List<Person> personList = new ArrayList<Person>();

    personList.add(new Person("Sherry", 9000, 24, "female", "New York"));
    personList.add(new Person("Tom", 8900, 22, "male", "Washington"));
    personList.add(new Person("Jack", 9000, 25, "male", "Washington"));
    personList.add(new Person("Lily", 8800, 26, "male", "New York"));
    personList.add(new Person("Alisa", 9000, 26, "female", "New York"));

    // 按工資升序排序(自然排序)
    List<String> newList = personList.stream().sorted(Comparator.comparing(Person::getSalary)).map(Person::getName)
        .collect(Collectors.toList());
    // 按工資倒序排序
    List<String> newList2 = personList.stream().sorted(Comparator.comparing(Person::getSalary).reversed())
        .map(Person::getName).collect(Collectors.toList());
    // 先按工資再按年齡升序排序
    List<String> newList3 = personList.stream()
        .sorted(Comparator.comparing(Person::getSalary).thenComparing(Person::getAge)).map(Person::getName)
        .collect(Collectors.toList());
    // 先按工資再按年齡自定義排序(降序)
    List<String> newList4 = personList.stream().sorted((p1, p2) -> {
      if (p1.getSalary() == p2.getSalary()) {
        return p2.getAge() - p1.getAge();
      } else {
        return p2.getSalary() - p1.getSalary();
      }
    }).map(Person::getName).collect(Collectors.toList());

    System.out.println("按工資升序排序:" + newList);
    System.out.println("按工資降序排序:" + newList2);
    System.out.println("先按工資再按年齡升序排序:" + newList3);
    System.out.println("先按工資再按年齡自定義降序排序:" + newList4);
  }
}
運行結(jié)果:
按工資升序排序:[Lily, Tom, Sherry, Jack, Alisa]
按工資降序排序:[Sherry, Jack, Alisa, Tom, Lily]
先按工資再按年齡升序排序:[Lily, Tom, Sherry, Jack, Alisa]
先按工資再按年齡自定義降序排序:[Alisa, Jack, Sherry, Tom, Lily]

3.8 提取/組合

流也可以進行合并、去重、限制、跳過等操作。



public class StreamTest {
  public static void main(String[] args) {
    String[] arr1 = { "a", "b", "c", "d" };
    String[] arr2 = { "d", "e", "f", "g" };

    Stream<String> stream1 = Stream.of(arr1);
    Stream<String> stream2 = Stream.of(arr2);
    // concat:合并兩個流 distinct:去重
    List<String> newList = Stream.concat(stream1, stream2).distinct().collect(Collectors.toList());
    // limit:限制從流中獲得前n個數(shù)據(jù)
    List<Integer> collect = Stream.iterate(1, x -> x + 2).limit(10).collect(Collectors.toList());
    // skip:跳過前n個數(shù)據(jù)
    List<Integer> collect2 = Stream.iterate(1, x -> x + 2).skip(1).limit(5).collect(Collectors.toList());

    System.out.println("流合并:" + newList);
    System.out.println("limit:" + collect);
    System.out.println("skip:" + collect2);
  }
}
運行結(jié)果:
流合并:[a, b, c, d, e, f, g]
limit:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
skip:[3, 5, 7, 9, 11]
好,以上就是全部內(nèi)容,能堅持看到這里,你一定很有收獲。
作者:云深i不知處
https://blog.csdn.net/mu_wind/article/details/109516995

往期資源  需要請自取

Java項目分享 最新整理全集,找項目不累啦 03版

臥槽!字節(jié)跳動《算法中文手冊》火了,完整版 PDF 開放下載!

字節(jié)跳動總結(jié)的設(shè)計模式 PDF 火了,完整版開放下載!

堪稱神級的Spring Boot手冊,從基礎(chǔ)入門到實戰(zhàn)進階

臥槽!阿里大佬總結(jié)的《圖解Java》火了,完整版PDF開放下載!

喜歡就"在看"唄^_^

瀏覽 33
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 欧美在线网址| 中文字幕成| 撒尿BBw搡BBwBBw| 成人片网址| 伊人丁香| 青娱乐精品在线| 中文字幕成人网| 亚洲AV无码成人精品区东京热 | 国产精品色视频| 午夜一区二区三区| 动漫3D成人H无码国漫| 五月婷视频| 9I免费看片黄| 毛片网站大全| 大地资源38页| 不卡一区| 亚洲欧美在线视频观看| 97视频在线免费观看| 九九九成人视频| 操B影院| 尤物免费视频| 91人妻日韩人妻无码专区精品| 激情伊人五月天| 欧美一级性爱| 成人黄色AV网站| 欧美视频第一页| 精品久久免费| 99热精品国产| 亚洲日韩一区| 国产TS丝袜人妖系列视频| 亚洲无码色婷婷| 美女一级片| 黄色美女视频网站| 91人妻人人澡人人爽人人精品乱| 欧美亚洲日韩一区二区| 高潮国产| 苗条一区小视频| 久久草在线观看| 北条麻妃被操| 天天色天天日天天干| 北条麻妃在线一区| 日本久久视频| 无码日韩人妻精品久久蜜桃| 97精品一区二区三区A片| 2024国产精品| 中文亚洲视频| 黄色电影AV| 精品交换一区二区三区无码| 韩国午夜福利视频| 中文字幕乱码亚洲无线码按摩| 亚洲女与黑人正在播放| 亚洲无码免费视频| 婷婷综合在线| GOGO人体做爰大胆视频| 无码人妻一区二区| 99热最新网址| 黄色国产在线观看| 亚洲无码福利视频| 久草视频免费| 欧美性爱无码| 成人av免费在线观看| 99久久久国产精品无码| 国产激情福利| 日韩AV综合| 亚洲精品911| 一本道视频在线| 91黄色视频网站| 青青草在线免费视频| 国产毛片一区| 91香蕉国产视频| 亚欧一区二区| 中文字幕欧美激情| 色色视频网| 国产aaaaaaaaaa| 91人妻中文字幕| 免费黄视频在线观看| 成人黃色A片免费看| 欧美V亚洲| 国产成人V在线精品一区| 啪啪成人视频| 久草香蕉| 五月丁香婷中文字幕| 人妻久操| 精品免费一区二区三区四区| 中文字幕亚洲专区| 青青综合网| 香蕉在线观看| 亚欧视频在线观看| 这里只有精品视频在线| 欧美A黄片| 特级西西人体444www高清大胆| 777色色色| 五月天激情四射| 欧美四虎| 神马午夜视频| 一级a免一级a做免费线看内祥| 涩五月婷婷| 欧美人妻日韩精品| 亚洲精品久久久久avwww潮水 | 91日韩在线| 亚洲午夜福利视频| 国产在线观看免费成人视频| 欧美一级黄色性爱视频| 精品国产一区二区三区性色AV | 欧美视频色| 人人操夜夜| 大黑逼AV| 91精品国产91久久久久久吃药| 天天天做夜夜夜爽无码| 撸一撸免费视频| 亚洲天堂婷婷| 在线观看成人18| 日韩av中文| 日韩欧美V| 一区二区成人电影| 五月丁香婷婷色| 国产精品91视频| 人人操av| 少妇一区二区三区| 欧美色性乐汇操日本娘们| 香蕉漫画在线观看18| 俺来也影院| 婷婷丁香五月在线| 亚洲乱伦av| 欧美精品A片| 五月丁香色播| 翔田千里AV| 欧美性猛交XXXX乱大交| 人人操人人干人人摸| 亚洲欧洲免费视频| 超碰人人在线| 免费人成年激情视频在线观看| 成年人性生活免费视频| 操逼操逼操逼操逼操逼操逼| 国产av网| 九九韩剧网最新电视剧免费观看 | 精国产品一区二区三区A片| 日韩精品免费一区二区在线观看| av天堂资源在线| 最新免费一区二区三区| 亚洲精品伊人| 92丨九色丨偷拍老熟女| 少妇搡BBBB搡BBB搡澳门| 亚洲第一网站| 国产精品秘精东影业| 久久黄色成人视频| 亚洲真人无码| 国产精品内射视频| 国产精品国产三级国产专业不| 国产精品A片守望| 午夜aaa| 麻豆传媒视频观看| 夜色福利在线看| 国产精品久久在线| ww免费视频| 欧美日韩国产中文字幕| 国内免费av| 婷婷丁香六月| 青草久在线| 女人18片毛片60分钟翻译 | 黄色视频免费观看国产| 特黄AAAAAAAAA真人毛片| 黄色操屄视频| 中文字幕在线观看日韩| 精品久久久久久久| 特级大毛片| 人人爽人人操人人爱| 色天天干| 亚州V| 大香蕉人人| 亚洲成人影片| 日韩欧美中文在线观看| 日本中文字幕在线观看视频| 天堂va欧美va亚洲va在线 | 国产色情性黄片Av网站| av大片免费看| 欧美精品久久久| 91综合网| 日本一区二区三区免费看| 插插视频| 手机AV网站| 国产91在线拍揄自揄拍无码九色| 精品国产天线2024| www.欧美视频| 国产A级片| 91亚洲精品乱码久久久久久蜜桃| 婷婷av在线| 白浆四溢av| 苍井空精毛片精品久久久| 最近日本中文字幕中文翻译歌词| 日操夜操| 国产不卡在线| 蜜桃影视| 少婦揉BBBB揉BBBB揉| 激情视频免费在线观看| 亚洲天堂免费观看| 成人视频在线观看18| 无码专区av| 亚洲无码视频在线观看高清| 国产精品系列视频| xxxx色| 一本色道久久综合无码| 加勒比无码| 色哟哟AV| 蜜桃高清无码| 国产无码自拍偷拍| 中文字幕aV在线| 67194熟女| 日韩电影中文字幕| 激情五月天小说网| 在线免费看a| 黑人大香蕉| 青春草在线视频| 人人妻人人操人人爱| 三级AV在线观看| 无码区一区二区| www.91国产| 九九久久综合| 久久99精品国产.久久久久久| 午夜成人福利剧场| 性爱视频免费网站| 人人摸人人操人人摸| 青青草原免费在线视频| 亚洲人妻无码视频| 中文字幕成人在线| 全部在线A片免费播放| 熟女老阿V8888AV| 日韩免费在线观看视频| 国产色五月视频| 91久久人澡人妻人人澡人人爽 | 天天扣天天操| 99久久国产精| 欧美视频第一页| 中文字幕++中文字幕明步| 久久中文无码| 视频一区18| 大香蕉伊在线观看| zzjicom| 四虎成人无码A片观看| 小视频+福利| 亚洲欧洲有码在线| 国产色拍| 国产婷婷色一区二区三区| 91精品婷婷国产综合久久韩漫| 亚洲黄色视频在线免费观看 | 大香蕉久久爱| 91丨人妻丨国产| 在线欧美日韩| 国产理论| 国产精品成人3p一区二区三区| 色爱av| 午夜性视频| 午夜免费播放观看在线视频| 97人妻一区二区精品视频| 中文字幕第2页| 国产精品色在线回看| 美日韩一区| 91久久香蕉囯产熟女线看蜜桃| 精品视频在线观看| 国产av小电影| 九九精品国产| 国产操穴| 波多野结衣大战黑人| 特极西西444WWW大胆无码| 亚洲国产成人精品综合99| 欧美日韩一区二区三区四区| 欧美视频精品| a三级片| 毛片A级| 日韩人妻精品无码久久| 麻豆黄色电影| 狠狠综合网| 久久九九99| 五月天成人导航| 午夜久久| 久久精品水多多www| 91操b| 国产精品一二区| 不卡AV在线播放| 91丨九色丨熟女新版| 亚洲AV成人片无码网站| 欧美一区二区三区系列电影| 国产黄片免费在线观看| 午夜精品18视频国产17c| 成人午夜无码| 国产91白丝在一线播放| 麻豆蜜桃91无码| 成人黄色av| 天天干天天干| 91蜜桃视频在线观看| 在线免费观看黄| 亚洲无码手机在线| 波多野结衣av中文字幕| 人人草人人摸| 国产做爰XXXⅩ久久久骚妇| 国内免费av| 国产人妻人伦精品1国产丝袜| 天天日夜夜草| 外国成人视频| 青青草伊人大香蕉| 日韩高清无码一区二区| 青青青国产在线| 亚洲精品娱乐| 国产精品视频一区二区三区在线观看 | 人人肏| 一级a片在线| 香蕉AV777XXX色综合一区 | 刘玥91精品一区二区三区| 久久久精品中文字幕麻豆发布| 成人无码区免费A片| 中文字幕资源站| 911国产精品| 中文字幕亚洲精品| 国产午夜精品一区二区三区牛牛| 久免费视频| 免费观看黄片网站| 军人妓女院BD高清片在线播放| 亚洲无码一卡| 免费黄色三级片| 国产一区二区00000视频| 国产精品乱子伦| 国产小视频在线| 麻豆一二三区| 天天爽天天操| 国产在线观看无码| 91精品综合| 婷婷成人综合网| 午夜成人免费视频| 久久色在线视频| 一级A黄片| 亚洲人成777| 超碰碰碰碰碰| 五月亚洲六月婷婷| 男女啊啊啊| 免费看AV大片| 你操综合| 五月激情婷婷基地| 91超碰久久在线| 6969电视影片最新更新| 日韩精品在线观看免费| 撸撸操在线视频观看只有精品| 精品一区电影| 全部视频午夜寂寞| 日韩中文字幕免费在线观看 | 一级久久| 亚洲操逼电影| 91视频网站| 18禁污网站| 中文字幕亚洲精品| 久色91| 精品人妻一区二区三区四区不卡在 | 国内精品国产成人国产三级| 免费看黄色视频的网站| 免费黄片网站| 国产黄色视频免费在线观看| 欧美九九| 老汉AV| 在线亚洲福利| 亚洲天堂AV网| 成人黄色性视频| 国产AV黄片| 国产黄色a片| 国产成人无码区免费AV片在线 | 97国产在线观看| 一区二区三区视频| 一二区免费视频| 日韩精品一区二区三区四区| 亚洲国产熟妇无码日韩| 国产久视频| 豆花视频logo| 亚洲中文字幕无码在线观看 | 在线有区别亚洲| 超碰2021| 高清免费无码视频| 天堂网2025| 最新一区二区| 无码专区中文字幕| 三级片在线看片AV| 无码视频韩国| 中文字幕一二三| 蜜桃AV一区二区三区| 中文字幕第27页| 久久人妻熟女中文字幕av蜜芽| 国产一区二区视频在线| 亚洲成人无码视频| 亚洲日本中文| 北条麻妃视频在线播放| 丰滿人妻一区二区三区| 亚洲福利在线免费观看| 无码一区二区三区免费| 91蜜桃传媒在线观看| 成人片天天看片欧美一级| 久草视频网| 欧美成人精品一级| 欧美国产激情| 伊人大香在线| 夜夜骚精品人妻av一区| 亚洲成人内射| 天天日天天操天天日| 3D动漫啪啪精品一区二区中文字幕| 91久久人澡人妻人人澡人人爽 | 污污污污污www网站免费观看| 日本操鸡小视频| 午夜无码影院| 99热这里只有精品999| 欧美V| 日韩毛片在线免费观看| 91无码在线观看| 91蜜桃传媒在线观看| 亚洲最大三级片| 国产激情视频在线播放| 人妻综合第一页| 亚洲av免费在线观看| 视色视频在线观看18| 亚洲图片在线播放| 亚洲av高清无码| 牛牛在线精品视频| 日韩中文字幕在线观看| 人妻天天干| 婷婷视频网| 欧美日韩国产精品| 三级片无码麻豆视频| 日韩日日操| 亚洲精品在线观看视频| 五月大香蕉| 中文字幕高清免费看| www.黄色片| 成人天堂一区二区三区| 伊人在线视频| 中文字幕乱码中文字幕| 日韩免费性爱视频| 国产性爱在线| 国产视频第一页| 52妺嘿嘿午夜福利在线| 久久久9999| 在线视频一区二区三区四区| 一道本视频在线免费观看| 精品成人电影| 暖暖高清无码| 欧美一道本在线| 大香蕉三级片| 人人操人人干人人看| 久久久人妻无码精品蜜桃| 三级片无码在线播放| 国产中文字幕波多| 青草网在线观看| 激情色播| 成人一级a片| 日本AA视频| 狠狠干在线| 成人a片视频| 久久草视频在线播放| 久久精品中文字幕| 男女啊啊啊| 人人摸人人看人人| 超碰91在线| 西西4444WWW无码精品| 91一级片| 五月天婷婷在线无码| 伊人久久电影| 人人上人人摸| 欧美A片免费观看| 天天干,夜夜操| 91人妻综合| 少妇性受XXXX黑人XYX性爽| 免费在线观看AV| 456亚洲影院| 日韩精品无码AV| 操逼不卡视频| H片在线免费观看| 国产伦精品一区二区三区视频女| 天天综合网站| 大香蕉国产精品| 授乳奶水x88MAV| 天堂8在线视频| 成人国产精品免费观看| 一级A片60分钟免费看| 黄色成人网址| 无码在线播放视频| 亚洲在线| 激情五月丁香五月| 中文字幕有码在线看| 国产一级A片免费看| 夜夜操夜夜操| 欧美在线小视频| 久久国产乱子伦精品免费午夜...| 日本久久婷婷| 91麻豆成人| 久久精品www人人爽人人| 欧洲综合视频| 婷婷久草网| 大香伊人网| 簧片网站在线观看| 国产视频成人| 91国产福利| 欧美黄色网| 波多野结衣东京热| 日本一级片| 中日韩精品A片中文字幕| 一级免费毛片| 成人黄片视频| 真人无码| 爱爱爱网址| 综合成人在线| 8050午夜网| 亚洲无码字幕| 在线视频你懂| 二区三区在线观看| 亚洲二区后入极品| 人人澡人人澡人人澡| 香蕉国产2023| 超碰九九热| 亚洲中文字幕在线观看免费| 色色天堂| 国产免费黄色片| 在线视频一区二区三区四区| 免费在线观看黄色网址| 亚洲91黄色片| 91精品久久久久久久| 超碰最新在线| A片大香蕉| 成人毛片一区二区三区无码| 日韩乱轮小说与视频| 一区二区AV| 操人网站| 99热精品国产| 欧美日屄视频| 51精品国产午夜福利| 亚洲不卡| 色婷婷导航| 69网站| 亚洲H| 秋霞午夜久久| 激情小视频在线| 一区二区久久| 2021无码| JLZZJLZZ亚洲女人| 国产日女人| 91无码人妻东京热精品一区| 西西www444无码免费视频| 午夜无码视频| 成人在线小视频| 中文字幕一区二区二三区四区 | 亚洲国产精品成人久久蜜臀| 久久精品国产亚洲AV成人婷婷| 天天干天天操天天拍| 欧美久久一区二区三区四区视频| 日韩小视频| 在线看黄色片| 在线观看成年人视频| 欧美成人精品网站| 欧美精品黄| 刘玥精品A片在线观看| 亚洲第一区欧美日韩| 日逼一级片| 国产精品无码白浆高潮| 国产2页| 亚洲精品久久久久毛片A级绿茶| 99re视频在线播放| 日本a片免费| 动图综合亚洲综合欧美男男| 手机免费av| 亚洲精品一区二区三区在线观看| 91人妻人人澡人人澡人人精品| 尿在小sao货里面好不好| 中文字幕国产在线观看| 东京热观看| 国产视频一区二区在线| 中文无码字幕| 久久人妻熟女中文字幕av蜜芽| 波多野在线视频| 人人操综合| 西西特级WWW444无码| 四色影视| 日韩高潮| 免费欧美黄片| 成人在线观看无码| 胖老板办公室沙发无套爆秘书| 亚洲日韩中文字幕| 亚洲欧美另类在线| 免费无人区一码二码乱码怎么办| 男人的天堂社区| 777中文字幕| 国产一级自拍| 老熟女搡BBBB搡BBBB视频| 人人妻人人玩澡人人爽| 中文字幕视频在线直播| 久色视频福利| 天天日夜夜| 18禁网站在线| 一区二区高清视频| 伊人视频在线观看| 精品无码人妻一区二区| 奇米影视77777| 五月黄色电影| 九色PORNY丨自拍蝌蚪| 乱伦播放五月天| 天天操大香蕉| 精品人妻一区二区乱码一区二区| aa人人操夜夜操人人| 午夜大香蕉| 日本黄色免费视频| 国产高清不卡| 欧美日韩高清在线| 欧美老熟妇乱大交XXXXX| 中文字幕Av在线| 国产在线观看免费| 日本成人毛片| 婷婷国产精品视频| 丰满熟妇人妻无码视频| 一本久道无码| 一区二区免费在线观看| www.91九色| 52妺嘿嘿午夜福利在线| 亚洲AV无码成人精品区东京热 | 日韩中文性受视频| 亚洲视频一区| 亚洲天堂影院| 国产成人在线播放| 无码一道本| 色女人天堂| 91麻豆精品传媒国产| 熟妇人妻中文AV| 操b视频在线观看| 日韩成人黄色电影| A片视频免费| 亚洲欧洲综合| 国产v在线| 久久艹免费视频| 熟女少妇一区二区三区| 亚洲激情在线观看| 亚洲视频欧美视频| 成人一级a片| 日本成人黄色电影| 成人无码免费视频| 国外成人性视频免费| 亚洲一本之道| 欧美日韩在线视频免费观看| 久久婷婷婬片A片AAA| 日韩无码AV一区二区三区| 亚欧一区二区| 午夜三区| 色婷视频| 特级西西444WWW无码视频兔费看| 亚洲精品国产AV婷婷| 九一亚洲精品| 色色激情五月天| 成人免费网站在线| 欧美一级A片在线观看| 真人BBwBBWBBw另类视频| 国产无遮挡又黄又爽又色视频| 欧美aⅴ| 在线看亚洲| 久久一二三四| 上床视频网站| 91久久成人| 午夜AV电影| 91叉叉叉| 中文无码播放| 黄色A片免费看| 亚洲成人AV在线播放| 97人妻精品一区二区三区视频 | 天天干天天日天天操| 亚洲中文字幕久久日| 久久国产黄色一级片| 久久嫩草精品久久久久精| 日本少妇黄色视频| 99久久黄色| 岛国av无码免费| 欧美三级在线观看视频| 国产AV综合网| 黄91在线观看| 撸一撸av| 影音先锋成人AV资源| a√免费看| 日韩无码精品一区二区三区| 91九色91蝌蚪91成人| 豆花视频成人版www满18| 国产成人a亚洲精品无码| 中文字幕国产av| 人妻FrXXeeXXee护士| 亚洲大片| 国产免费一区二区三区最新不卡 | 免费无遮挡视频网站视频| 五月天福利网| 伊人久久AV| 黄色电影视频在线| 成人91视频| 操逼操逼视频| 日批网站视频| 妻子互换被高潮了三次| 亚洲AV男人天堂| 国产精品扒开腿做爽爽爽A片唱戏| 嫩草在线精品| 欧美色五月| 安徽少妇搡bbw搡bbbb| 天天干天天上| 天堂av中文字幕| 人人操夜夜爽| 欧美成人电影在线观看| 国产成人自拍视频在线观看| 午夜成人在线视频| 综合色婷婷| 成人激情五月天| 久热精品视频在线观看| 91香蕉视频18| 老师机性爱视频在线播放| 国产精品日韩欧美| 日本亚洲视频| 欧美日黄| 国产伦精品一区二区三区视频女| 久久第一页| 蜜桃91精品秘成人取精库| 人人操av| 国内精品国产成人国产三级| 久久手机电影| 亚洲欧美婷婷五月色综合| 亚洲综合中文字幕在线播放| 久久婷综合| 99久久夜色精品国产亚洲| 亚洲黄色视频在线| 成人激情在线观看| 久久精品三级片| 在线人妻| 欧美在线国产| 亚洲精品视频在线观看免费| 一区无码高清| 亚洲精品ww| 国产精品日韩无码| www.色五月| 国产免费自拍| 日韩视频一二三| 精品多人P群无码视频| 人人澡人人摸| 人人插人人射| 日韩午夜福利| 日韩欧美在线视频观看| 日韩成人在线视频| 一级片黄色免费| 一道本无码视频| 亚洲无码AV在线观看| 欧美成人黄色小说| 国产精品国产精品国产专区不卡 | 久久一区二区三区四区五区| xxx日韩| 内射视频在线观看| 三洞齐开Av在线免费观看| 国产精品视频你懂的| 影音先锋AV无码| 精品国产久久久久久| 在线天堂AV| 91在线无码精品秘入口动作| 国产精品9999| 操一线天逼| 亚洲热在线视频| 亚洲精品国偷拍自产在线观看蜜桃 | 成人做爰黄级A片免费看土方| 久热思思| 玖玖资源站中文字幕| 婷婷午夜精品久久久久久性色AV | 丁香激情网| 五月天色色婷婷| 熟女人妻人妻の视频| 中文字幕av免费在线观看| 欧美性少妇| 免费草逼视频| 亚洲天堂AB| 国产夫妻av| 日本黄色片视频| 日本高清无码在线观看| 高清无码三级| 91中文字幕| 欧美性一区| 国产做爰XXXⅩ久久久骚妇| 操逼视频免费网站| www.偷拍| 无码一区二区北条| 一级黄片在线| 中文字幕色站| 日韩在线观看一区| 国产精品秘久久久久久免费播放| 国产操屄网| 国产av日韩av| 精品久久一区二区| 久久无码一区二区三区| 91视频免费观看| 无码男女| 日韩中文字幕网| AV在线资源网| 黄色成人18| 韩国精品一区| 一级AA视频| 中文有码视频| 精品免费国产一区二区三区四区的使用方法| 国产麻豆电影在线观看| 欧美日韩无| 人人操人人骑| 中文字幕日韩在线观看| 亚洲性爱专区| 亚洲一区二区视频在线观看| 亚洲免费观看高清完整版| 东北女人操逼| 亚洲Japanese办公室制服| 人妻丰满熟妇av无码| 一本色道久久综合无码人妻软件| 欧美成人A| 香蕉黄色三级片| 乱伦播放五月天| 99久久婷婷国产综合精品hsex| 免费亲子乱婬一级A片| 成人抽插视频| 精品视频免费在线| 翔田千里無碼破解| 日逼一级片| 成人蜜臀AV| 人人操人人摸人人爽| 一区二区三区精品视频| 久草天堂| 男人天堂亚洲| 刘玥一区二区三区| 免费看黃色AAAAAA片| 亚州AV天堂| 国产黄片一区二区三区| 国产色综合视频| 黄色成人视频在线观看| 一级A片黃色A片| AV黄页| 青青草免费公开视频| 91国产视频在线播放| 国产乱╳╳AⅤ毛片| 欧美疯狂做受XXXXX高潮| 无码一区二区三| 无码国精品一区二区免费蜜桃| 午夜麻豆| 69视频网| 日本三级久久| 亚洲男女免费视频| 西西4444www大胆无| 亚洲性爱专区| 欧美性猛交ⅩXXX乱大交| 999国产精品| 亚洲第一黄色| 天堂AV无码AV| 国产精品国产精品| 日韩一区二区三区四区| 在线观看黄色| 亚洲三级在线视频| 91精品久久久久| 99国产精品久久久久久久| 黄色a级片| 黄色av天堂| 五月天婷婷在线播放视频免费观看| 色综合久久久| av黄色在线观看| 内射学生妹视频| 欧美国产乱伦| 国产精品一区二区在线| 日韩中文久久| 国产视频激情| 欧美77777| 91丨九色丨蝌蚪丨对白| 尤物精品在线| 欧美一级性爱| 麻酥酥在线视频| 国产精品美女视频| 高清无码视频网站| 国产黄色一级电影| 精品无码人妻一区二区| 午夜精品视频| 中文无码影院| 天天摸夜夜操| 天天干强奸视频在线综合| 天天操天天日天天操| 三级片91| 大地8免费高清视频观看大全| 亚洲无码色色| 欧美在线黄色| 日本精品在线观看视频| 婷婷五月天色色| 国产性爱网| 天天透天天干| 操逼在线播放| A区性愛社区| 一个人看的视频www| 久久久久三级片| 天天综合91| 亚洲内射无码| 秋霞福利网| 色天使青青草| 丰满人妻一区二区三区四区53| 中文字幕亚洲在线观看| 天天干天天色天天射| 午夜偷拍| 在线观看A片| 天堂va欧美ⅴa亚洲va一夜| 国产一级a毛一级a做免费高清视频| 人人干人人操人人爱| 一本到在线视频| 亚洲无码电影在线| 久草视频在线免费播放|