JAVA自學筆記(10)—Stream流、方法引用

来源:https://www.cnblogs.com/mzq-/archive/2020/07/03/13226120.html
-Advertisement-
Play Games

開胃菜 ——實現遍歷集合,開啟Stream流的便利化 import java.util.ArrayList; import java.util.Collections; public class Main{ public static void main(String[] args) { Array ...


開胃菜

——實現遍歷集合,開啟Stream流的便利化

 

import java.util.ArrayList;
import java.util.Collections;


public class Main{
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<String>();
        ArrayList<String> list1 = new ArrayList<String>();
        Collections.addAll(list,"ab","cea","fshwe","dea");
        list.stream().
                filter(str -> str.contains("a")).
                filter(str -> str.length() == 3).
                forEach(str-> System.out.println(str));

    }
}

 

列印結果:

cea
dea

走進Stream流的世界

1.0 獲取stream流的方法

 

 

import java.util.*;
import java.util.stream.Stream;

public class Main{
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.stream();//第一種方式

        //特別的Map集合也可以間接的獲取
        Map<String,Integer> map=new HashMap<>();
        Set<String> keySet = map.keySet();
        keySet.stream();
        Collection<Integer> integers = map.values();
        integers.stream();

        Set<Map.Entry<String, Integer>> entries = map.entrySet();

        entries.stream();


        //第二種方式
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);//數組

    }
}

2.0 Stream流的方法

(1)forEach

 

import java.util.stream.Stream;

public class Main{
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("a", "b", "c", "d", "e");
        stream.forEach((str)-> System.out.print(str+" "));
        //a b c d e 
    }
}

 

(2) filter()

import java.util.stream.Stream;

public class Main{
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("baby", "boy", "home", "dream", "eage");
        Stream<String> a = stream.filter(str -> str.contains("a")).filter(str -> str.length() >=3);
        a.forEach((str)-> System.out.print(str+" "));
        //baby dream eage
    }
}

(3)Stream流的特點

 

(4)Map方法

import java.util.stream.Stream;

public class Main{
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("12", "34", "56");
        stream.map((str)->Integer.parseInt(str)+1).
                forEach((Str)-> System.out.print(Str+" "));

        //13 35 57 
    }
}

(5)count方法

(6)limit方法

 

(7)skip方法

 

(8)concat方法

 

方法引用

—— 簡便你我他

1.0 通過對象名引用成員方法

 

public class Main{
    public static void PrintString(MessageBuilder mes)
    {
        mes.bulidString("hello");
    }
    public static void main(String[] args) {
        //Lambda
        PrintString((s)->{
            Printer pri=new Printer();
            pri.PrintUpper(s);//HELLO
        });

        //方法引用
        Printer printer=new Printer();
        PrintString(printer::PrintUpper);//HELLO
    }
}

2.0 通過類名引用靜態方法  

 

public class Main{
    public static int calmathod(int num,MessageBuilder mes)
    {
        return mes.Cal(num);
    }
    public static void main(String[] args) {
        int num=-10;
        /*
        int calmathod = calmathod(num, (number) -> {
            return Math.abs(number);
        });*/
        int calmathod=calmathod(num,Math::abs);
        System.out.println(calmathod);//10
    }
}

3.0 通過super引用父類的方法

public class Main extends FU{
    @Override
    public void show(){
        System.out.println("Hello,My soulmate!");
    }
    public void method(MessageBuilder mes){
        mes.greet();
    }
    public void Print()//調用父類方法
    {
        /*
        method(()->{
            FU fu = new FU();
            fu.show();
        });
        */
       method(super::show);//Hello,My friend!
    }
    public static void main(String[] args) {
     new Main().Print();
    }
}

4.0 通過this調用本類中的成員方法  

public class Main{
    public void method()
    {
        System.out.println("Hello world!");
    }
    public void showMethod(MessageBuilder mes){//函數式介面
        mes.show();
    }
    public void MethodPrint()
    {
        /*
        showMethod(()->{
            this.method();
        });
         */
        showMethod(this::method);
    }

    public static void main(String[] args) {
        new Main().MethodPrint();//Hello world!
    }
}

5.0 類的構造器(構造方法)  

public class Person {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }
}

  

@FunctionalInterface
public  interface MessageBuilder {
    public abstract Person show(String name);
}

  

public class Main{
    public static String Method(String name,MessageBuilder mes)
    {
        Person person = mes.show(name);
        return person.getName();
    }
    public static void main(String[] args) {
        String name="布丁";
        /*
        String method = Method(name,(str)->{
             return new Person(str);
        });
         */

        String method = Method(name, Person::new);

        System.out.println(method);

    }
}

6.0 數組的構造器引用

@FunctionalInterface
public  interface MessageBuilder {
    public abstract int[] Builder(int length);
}

  

public class Main{
    public static int[] Method(int length,MessageBuilder mes)
    {
        int[] builder = mes.Builder(length);
        return builder;
    }
    public static void main(String[] args) {
        /*
        int[] method = Method(3, (length) -> {
            return new int[length];
        });
         */
        int[] method = Method(3, int[]::new);

        System.out.println(method.length);
    }
}

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 剛回到家,又被公司群里的消息轟炸了。讓統計每個人最近是否去過石景山萬達廣場。 這基本上已經是每日必備了,只要有任何風吹草動,就需要我們填各種信息。 我們都知道,北京最近的疫情很不樂觀,從每天的數據就能看出來了。 也許很多小伙伴不在北京,是切實感受不到的。 就拿我自己舉例吧,在去公司的每一天,我 ...
  • 這篇博客還是整理從https://github.com/LyricTian/gin-admin 這個項目中學習的golang相關知識 作者在項目中使用了https://github.com/google/wire 做依賴註入,這個庫我之前沒有使用過,看了作者代碼中的使用,至少剛開始是看著優點懵,不知 ...
  • 轉載:https://blog.csdn.net/walkerJong/article/details/7946109 ...
  • # Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonea = TreeNode(1)b = TreeNode( ...
  • 編寫程式,讀取在1到100 之間的整數,然後計算每個數出現的次數。假定輸入是以0 結束的。 下麵是這個程式的一個運行示例: Write a program that reads the integers between 1and 100 and counts the occurrences of e ...
  • 安裝pandas 通過python pip安裝pandas pip install pandas pandas數據結構 pandas常用數據結構包括:Series和DataFrame Series Series是一種一維的數組型對象,包含一個值序列(與numpy中的數據類型相似),數據標簽(稱為索引 ...
  • pygame 圖像 / 圖形繪製 1. pygame 的圖像繪製 pygame 支持多種存儲圖像的方式(也就是圖片格式),例如 JPEG、PNG 等,具體支持 JPEG (一般擴展名為 .jpg 或者 .jpeg ,數位相機、網上的圖片基本上都是這種格式,這是一種有損壓縮方式,儘管對圖片的質量有所損 ...
  • opencv——threshold閾值處理、自適應閾值處理、otsu處理(大津法) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...