Java8中Stream流式方法

歡迎大家加入我的github項目,一起學習,一起發展
---> 全棧工程師進階學習站
---> 我的前端學習筆記
--->行業內最新最羣的報告,工作日每日更新

—>原生 js 訓練計劃

⭐️Java8中Stream流式方法

Lambda表達式的簡單規則

 lambda表達式的要求:

1.不改變原數據

2.不在內存中存數據

3.不可重複使用

?stream流

stream流的運行圖

image-20191007163337329

功能展示

(0).filter過濾

 public static void main(String[] args) {


        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        List<Student> students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);



        //篩選年齡大於15歲的學生
        List<Student> students1 = students.stream().filter(s -> s.getAge() > 15).collect(Collectors.toList());

        System.out.println("篩選年齡大於15歲的學生---------");

        students1.stream().forEach(list->{
            System.out.println(list);
        });

        //篩選住在浙江省的學生
        List<Student> students2 = students.stream().filter(s -> "浙江".equals(s.getAddress())).collect(Collectors.toList());
        System.out.println("篩選住在浙江省的學生-----------");

        students1.stream().forEach(list->{
            System.out.println(list);
        });

    }

image-20191008184806123

(1).Map轉換/通過條件生成新的集合

public static void main(String[] args) {

        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        List<Student> students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);



        //在地址前面加上部分信息,只獲取地址
        List<String> lists = students.stream().map(s -> "住址:" + s.getAddress()).collect(Collectors.toList());

        //循環輸出
        lists.forEach(list ->System.out.println(list));
    }

image-20191008184952173

(2).mapToInt/long/float求和

 public static void main(String[] args) {


        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        List<Student> students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);

       //求所有學生的年齡和
        int sum = students.stream().mapToInt(stu -> stu.getAge()).sum();
        System.out.println(sum);


    }

image-20191008185127282

(3).Sorted排序

 public static void main(String[] args) {
        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        Student s5 = new Student(4L, "田七", 16, "浙江");
        List<Student> students = new ArrayList<>();

        students.add(s3);
        students.add(s4);
        students.add(s1);
        students.add(s2);
        students.add(s5);


        //排序規則  雙重規則 後面的規則權重高!!!!
        //從小到大排序
        List<Student> lists = students.stream()
                                      .sorted(Comparator.comparingInt(Student::getAge))
                                      .sorted(Comparator.comparingLong(Student::getId))
                                      .collect(Collectors.toList());

        lists.stream().forEach(list -> {
            System.out.println(list);
        });
    }

image-20191008185210129

上面那個是從小到大排序,現在展示從大到小排序

  //從大到小排序
        List<Student> lists2 = students.stream().sorted((stu1, stu2) -> Integer.compare(stu2.getAge(), stu1.getAge())).collect(Collectors.toList());
        lists2.stream().forEach(list -> {
            System.out.println(list);
        });

image-20191008185543281

(4).Match匹配/查詢是否包含某條件

public static void main(String[] args) {
        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        List<Student> students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);


     //   有一個滿足      anyMatch:Stream 中任意一個元素符合傳入的 predicate,返回 true
        Boolean anyMatch = students.stream().anyMatch(s -> "南京".equals(s.getAddress()));
        if (!anyMatch) {
            System.out.println("沒有南京人");
        }

        //    全部滿足       allMatch:Stream 中全部元素符合傳入的 predicate,返回 true
        Boolean allMatch = students.stream().allMatch(s -> s.getAge() >= 15);
        if (allMatch) {
            System.out.println("所有學生都滿15週歲");
        }

        //    沒有一個滿足     noneMatch:Stream 中沒有一個元素符合傳入的 predicate,返回 true
        Boolean noneMatch = students.stream().noneMatch(s -> "王八".equals(s.getName()));
        if (noneMatch) {
            System.out.println("沒有叫王八的同學");
        }

    }

image-20191008185920318

(5).Min/Max 求最大最小值

public static void main(String[] args) {

        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        List<Student> students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);

        //min 求最小值
        Student student = students.stream().min(Comparator.comparingInt(Student::getAge)).get();

        //    傳統寫法    Student minS = students.stream().min((stu1,stu2) ->Integer.compare(stu1.getAge(),stu2.getAge())).get();
        System.out.println(student);

        //max  求最大值
        Student student2 = students.stream().max(Comparator.comparingInt(Student::getAge)).get();
        System.out.println(student2);
    }

image-20191008190018676

(6).Distinct 去重

 public static void main(String[] args) {
        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        Student s5 = new Student(4L, "田七", 17, "浙江");

        List<Student> students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);
        students.add(s5);

        //去重
        List<Student> lists = students.stream().distinct().collect(Collectors.toList());
        //便利輸出
        lists.stream().forEach(list -> {
            System.out.println(list.getName());
        });

    }

image-20191008190141940

(7).Skip 刪除前n個數據

  public static void main(String[] args) {
        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        Student s5 = new Student(4L, "田七", 16, "浙江");
        List<Student> students = new ArrayList<>();

        students.add(s3);
        students.add(s4);
        students.add(s1);
        students.add(s2);
        students.add(s5);


        //  skip,刪除前n個元素
        List<Student> lists = students.stream().skip(2).collect(Collectors.toList());

        lists.stream().forEach(list->{
            System.out.println(list);
        });

    }

image-20191008190235939

(8).Limit限制輸出個數

public static void main(String[] args) {
        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        List<Student> students = new ArrayList<>();
        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);

      //限制返回個數
        List<Student> lists = students.stream().limit(2).collect(Collectors.toList());

        lists.stream().forEach(list -> {
            System.out.println(list);
        });

    }

image-20191008190354387

(9).Reduce (聚合)轉換成一條數據

public static void main(String[] args) {

        Student s1 = new Student(1L, "張三", 15, "浙江");
        Student s2 = new Student(2L, "李四", 15, "湖北");
        Student s3 = new Student(3L, "王五", 17, "北京");
        Student s4 = new Student(4L, "田七", 17, "浙江");
        Student s5 = new Student(4L, "田七", 16, "浙江");
        List<Student> students = new ArrayList<>();

        students.add(s3);
        students.add(s4);
        students.add(s1);
        students.add(s2);
        students.add(s5);

      // 將他們的姓名聚合成一個字符串
        String appendStr = students.stream().map(stu->stu.getName()).reduce("", (a, b)-> a + b);
        System.out.println(appendStr);

    }

image-20191008190522427

閒聊時刻

10年短信公司,互聯網100強企業!主營業務:短信(國內和國際)App H5一鍵免密登錄,防薅羊毛接口,圖片OCR,空號檢測,活躍號檢測,人證覈驗,活體檢測,高防ddos攻擊等等200多個企業服務接口!需要的聯繫他13592366783 官方鏈接:https://zz.253.com/v5.html#/register?uid=1953

自己公司需求 偶然間 用了一家第三方接口供應商,產品應有盡有,很齊全,對接文檔非常詳細,彼此都很節約時間,主要非常穩定,包括服務方面很給力,有興趣的博友,可以聯繫他,算是對合作夥伴的支持了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章