最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java8新特性之Stream API詳解

 更新時(shí)間:2021年04月25日 14:30:07   作者:油炸冰可樂(lè)  
這篇文章主要介紹了Java8新特性之StreamAPI詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、前言

StreamAPI在Java8版本中使用,關(guān)注的是對(duì)數(shù)據(jù)的篩選、查找、存儲(chǔ)等

它可以做的事情有:過(guò)濾、排序、映射、歸約

二、使用流程

Stream實(shí)例化中間操作(過(guò)濾、排序、映射、規(guī)約)終止操作(匹配查找、歸約、收集)

三、案例演示

public class EmployeeData {
   
   public static List<Employee> getEmployees(){
      List<Employee> list = new ArrayList<>();
      
      list.add(new Employee(1001, "馬化騰", 34, 6000.38));
      list.add(new Employee(1002, "馬云", 12, 9876.12));
      list.add(new Employee(1003, "劉強(qiáng)東", 33, 3000.82));
      list.add(new Employee(1004, "雷軍", 26, 7657.37));
      list.add(new Employee(1005, "李彥宏", 65, 5555.32));
      list.add(new Employee(1006, "比爾蓋茨", 42, 9500.43));
      list.add(new Employee(1007, "任正非", 26, 4333.32));
      list.add(new Employee(1008, "扎克伯格", 35, 2500.32));
      
      return list;
   }
   
}
package JDK_8;

import org.junit.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamAPI {
    // 方式1:使用集合創(chuàng)建Stream
    @Test
    public void test1() {
        List<Employee> list = EmployeeData.getEmployees();
        // 返回一個(gè)順序流
        Stream<Employee> stream = list.stream();
        // 返回一個(gè)并行流
        Stream<Employee> employeeStream = list.parallelStream();
    }

    // 方式2:使用數(shù)組創(chuàng)建流對(duì)象
    @Test
    public void test2() {
        Employee e1 = new Employee(1003, "WZY", 26, 3000.69);
        Employee e2 = new Employee(1007, "王紫玉", 25, 8888);

        Employee[] list2 = new Employee[]{e1, e2};
        Stream<Employee> stream = Arrays.stream(list2);
        stream.forEach(System.out::println);

    }

    // 通過(guò)Stream.of 創(chuàng)建
    @Test
    public void test3() {
        Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
        stream.forEach(System.out::println);
    }

    // Stream.filter進(jìn)行過(guò)濾
    @Test
    public void test4() {
        List<Employee> list = EmployeeData.getEmployees();
        list.stream().filter(employee -> employee.getAge() > 25).forEach(System.out::println);
    }

    // 使用StreamAPI篩選
    @Test
    public void test5() {
        List<Employee> list = EmployeeData.getEmployees();
        list.add(new Employee(1004, "wzy", 25, 18888));
        list.add(new Employee(1004, "wzy", 25, 18888));
        list.add(new Employee(1004, "wzy", 25, 18888));
        list.add(new Employee(1004, "wzy", 25, 18888));

        list.stream().forEach(System.out::println);
        System.out.println();
        list.stream().distinct().forEach(System.out::println);
    }

    @Test
    public void test6() {
        List<String> list = Arrays.asList("a", "b", "c");
//        map(Function<? super T,? extends R> mapper)
//        返回由給定函數(shù)應(yīng)用于此流的元素的結(jié)果組成的流。
        list.stream().map(s -> s.toUpperCase()).forEach(System.out::println);

    }

    // 使用StreamAPI篩選:工資大于6000的員工
    @Test
    public void test7() {
        List<Employee> list = EmployeeData.getEmployees();
        list.stream().filter(s -> s.getSalary() > 6000).forEach(System.out::println);
    }

    // StreamAPI映射:map,接收參數(shù),將參數(shù)轉(zhuǎn)換為其他形式的信息;
    @Test
    public void test8() {
        List<Employee> list = EmployeeData.getEmployees();
        list.stream().map(e -> e.getAge()).forEach(System.out::println);

    }

    // StreamAPI排序,sorted幫助實(shí)現(xiàn)Comparable接口進(jìn)行對(duì)象比較
    @Test
    public void test9() {
        List<Employee> list = EmployeeData.getEmployees();
        list.stream().sorted((e1, e2) -> {
            int ageValue = Integer.compare(e1.getAge(), e2.getAge());
            if (ageValue != 0) {
                return ageValue;
            } else {
                return Double.compare(e1.getSalary(), e2.getSalary());
            }
        }).forEach(System.out::println);
    }

    // StreamAPI匹配:所有元素是否滿足下列條件
    @Test
    public void test10() {
        List<Employee> list = EmployeeData.getEmployees();
        boolean allMatch = list.stream().allMatch(e -> e.getSalary() > 5000);
        System.out.println(allMatch);
    }

    // StreamAPI查找:返回第一個(gè)元素
    @Test
    public void test11() {
        List<Employee> list = EmployeeData.getEmployees();
        Optional<Employee> first = list.stream().findFirst();
        System.out.println(first);
    }

    // StreamAPI查找:返回薪水?dāng)?shù)最大的員工
    @Test
    public void test12() {
        List<Employee> list = EmployeeData.getEmployees();
        Stream<Double> salaryStream = list.stream().map(e -> e.getSalary());
        Optional<Double> max = salaryStream.max(Double::compare);
        System.out.println(max);
    }

    // StreamAPI查找:薪水最小的員工對(duì)像
    @Test
    public void test13() {
        List<Employee> list = EmployeeData.getEmployees();
        Optional<Employee> min = list.stream().min((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary()));
        System.out.println(min);
    }

    // StreamAPI:歸約
    @Test
    public void test14() {
        List<Employee> list = EmployeeData.getEmployees();
        Stream<Double> salaryStream = list.stream().map(e -> e.getSalary());
        Optional<Double> sum = salaryStream.reduce((s1, s2) -> s1 + s2);
        System.out.println(sum.get());
    }

    // StreamAPI:收集
    @Test
    public void test15(){
        List<Employee> list = EmployeeData.getEmployees();
        List<Employee> employeeList = list.stream().filter(e -> e.getSalary() > 5000).collect(Collectors.toList());
        for (Employee employee : employeeList) {
            System.out.println(employee);
        }
    }
}

到此這篇關(guān)于Java8新特性之StreamAPI詳解的文章就介紹到這了,更多相關(guān)java StreamAPI詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 混亂的Java日志體系及集成jar包梳理分析

    混亂的Java日志體系及集成jar包梳理分析

    這篇文章主要詳細(xì)的為大家梳理分析了剪不斷理還亂的Java日志體系,以及日志系統(tǒng)涉及到的繁雜的各種集成?jar?包,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • SpringBoot實(shí)現(xiàn)對(duì)Http接口進(jìn)行監(jiān)控的代碼

    SpringBoot實(shí)現(xiàn)對(duì)Http接口進(jìn)行監(jiān)控的代碼

    Spring Boot Actuator是Spring Boot提供的一個(gè)模塊,用于監(jiān)控和管理Spring Boot應(yīng)用程序的運(yùn)行時(shí)信息,本文將介紹一下Spring Boot Actuator以及代碼示例,以及如何進(jìn)行接口請(qǐng)求監(jiān)控,需要的朋友可以參考下
    2024-07-07
  • 詳解Java中兩種分頁(yè)遍歷的使用姿勢(shì)

    詳解Java中兩種分頁(yè)遍歷的使用姿勢(shì)

    這篇文章主要介紹了詳解Java中兩種分頁(yè)遍歷的使用姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • SpringBoot實(shí)現(xiàn)Thymeleaf驗(yàn)證碼生成

    SpringBoot實(shí)現(xiàn)Thymeleaf驗(yàn)證碼生成

    本文使用SpringBoot實(shí)現(xiàn)Thymeleaf驗(yàn)證碼生成,使用后臺(tái)返回驗(yàn)證碼圖片,驗(yàn)證碼存到session中后端實(shí)現(xiàn)校驗(yàn),前端只展示驗(yàn)證碼圖片。感興趣的可以了解下
    2021-05-05
  • 一文詳解Java中的反射與new創(chuàng)建對(duì)象

    一文詳解Java中的反射與new創(chuàng)建對(duì)象

    Java中的反射(Reflection)和使用new關(guān)鍵字創(chuàng)建對(duì)象是兩種不同的對(duì)象創(chuàng)建方式,各有優(yōu)缺點(diǎn)和適用場(chǎng)景,本文小編給大家詳細(xì)介紹了Java中的反射與new創(chuàng)建對(duì)象,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-07-07
  • Java實(shí)現(xiàn)的Windows資源管理器實(shí)例

    Java實(shí)現(xiàn)的Windows資源管理器實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)的Windows資源管理器,實(shí)例分析了基于java實(shí)現(xiàn)windows資源管理器的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • mybatisplus 的SQL攔截器實(shí)現(xiàn)關(guān)聯(lián)查詢功能

    mybatisplus 的SQL攔截器實(shí)現(xiàn)關(guān)聯(lián)查詢功能

    大家都知道m(xù)ybatisplus不支持關(guān)聯(lián)查詢,后來(lái)學(xué)習(xí)研究發(fā)現(xiàn)mybatisplus的SQL攔截器可以實(shí)現(xiàn)這一操作,下面小編給大家分享我的demo實(shí)現(xiàn)基本的關(guān)聯(lián)查詢功能沒(méi)有問(wèn)題,對(duì)mybatisplus關(guān)聯(lián)查詢相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-06-06
  • java微信紅包實(shí)現(xiàn)算法

    java微信紅包實(shí)現(xiàn)算法

    這篇文章主要為大家詳細(xì)介紹了java微信紅包實(shí)現(xiàn)算法,列出紅包的核心算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • SpringBoot 如何讀取pom.xml中的值

    SpringBoot 如何讀取pom.xml中的值

    這篇文章主要介紹了SpringBoot 如何讀取pom.xml中的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Springboot基于websocket實(shí)現(xiàn)簡(jiǎn)單在線聊天功能

    Springboot基于websocket實(shí)現(xiàn)簡(jiǎn)單在線聊天功能

    這篇文章主要介紹了Springboot基于websocket實(shí)現(xiàn)簡(jiǎn)單在線聊天功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論

开江县| 长白| 茂名市| 从化市| 龙陵县| 安宁市| 沙湾县| 台江县| 凤凰县| 宽城| 安岳县| 罗定市| 淮南市| 福贡县| 镇坪县| 安福县| 东山县| 二连浩特市| 特克斯县| 青川县| 花垣县| 南开区| 石首市| 长岛县| 密山市| 双峰县| 汝南县| 上栗县| 湖北省| 思茅市| 布尔津县| 卢氏县| 斗六市| 蒙城县| 科尔| 应城市| 阳东县| 邓州市| 界首市| 化德县| 鞍山市|