検索
ホームページJava&#&チュートリアルJava でのストリーム フロー インスタンスの分析

    ストリーム フロー

    前回の記事では、Java 8 の新機能であるラムダ式について説明しましたが、これをビジネスで上手に活用できれば、コストを節約できます。コードがたくさんあり、見た目はかなりすっきりしています。次に、この記事では別の新機能を紹介します: Stream ストリーム、読み間違えないでください。 ! !ゲームをプレイするためのものではありません steam! !

    1. ストリームとは:

    Stream は Java 8 によって提案された新しい概念です。これは入出力ストリーム ではありません (ストリーム ではありません)。 IO ストリームと同じです。任意の関係がありますが、関数型プログラミングを使用してコレクション クラスを操作するツールです。つまり、内部反復メソッドでコレクション データを処理する操作であり、内部反復によりコレクション クラスをより詳細に制御できます。 Stream と Iterator の機能は似ていますが、Iterator が外部反復の形式でコレクション データを処理する操作である点が異なります。

    もちろん、Stream には独自の特性もあります:

    1. これはデータ構造ではなく、データを保存しません。ストリームに対する一連の操作を定義するだけです。元のデータ セット

    2。これらの操作は遅延的です。つまり、ストリーム内の要素がアクセスされるたびに、この一連の操作がこの要素

    3 に対して実行されます。保存されていない場合、各ストリーム ストリームは 1 回しか使用できません。

    ストリーム フローの実装図:

    Java でのストリーム フロー インスタンスの分析

    2. ストリームの作成:

    ストリームの流れ コレクションを操作するには、まず配列またはコレクションをストリームに変換してから操作する必要があります。

    # ストリームの公式ドキュメント:

    https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/Stream.html

    最初に 4 つ見てみましょう メソッド:

    1.filter: ラムダ式による条件付きフィルターの実装

    2.limit: ストリームをインターセプトし、ストリームのセクションをインターセプトします

    3.skip: オーバーフローをスキップ

    4.distinct: 重複を削除

    ストリームの作成:

    public class Test {
        public static void main(String[] args) {
            String [] arr = {"东","南","西","北"};
            //将数组转换成Stream
            Stream<String> stream = Arrays.stream(arr);
            stream = Stream.of(arr);
            stream = Stream.of("东","南","西","北");
            //将list集合转换成stream
            List<String> list = Arrays.asList("aa","cc","bb","aa","dd");
            stream = list.stream();
            //排序、去重、遍历
            list.stream().sorted().distinct().forEach(System.out::println);
            //用过Stream流操作完集合后还可以再转换成一个新的集合
            List<String> newList = list.stream().sorted().distinct().collect(Collectors.toList());
            System.out.println(newList.toString());
        }
    }

    出力:

    //走査と重複排除の結果:

    aa
    bb
    cc
    dd
    //Stream ストリームを使用してコレクションを操作した後、新しいコレクション
    [aa, bb, cc, dd]

    4 つのメソッドの操作: person クラス:

    このクラスのコード比較は多いのでget/setメソッドは書かないでください、使うときは忘れずに! !

    public class Person {
        private String  name;
        private Integer age;
        private  String country;
        private  char sex;
        @Override
        public String toString() {
            return "信息表:{" +
                    "name=&#39;" + name + &#39;\&#39;&#39; +
                    ", age=" + age +
                    ", country=&#39;" + country + &#39;\&#39;&#39; +
                    ", sex=" + sex +
                    &#39;}&#39;;
        }
    //这里节省的get/set代码
    //重写toString() 和 equals 和 hashcode 方法
        @Override
        public boolean equals(Object o){
            if(this == o)
                return true;
            if(o == null || getClass() != o.getClass())
                return false;
            Person person = (Person) o;
            if(country != null){
                if(this.country.equals(person.country)){
                    return  true;
                }else{
                    return false;
                }
            }
            return false;
        }
        @Override
        public int hashCode(){
            return Objects.hash(country);
        }
    }

    テスト クラス:

    ラムダ式と組み合わせて

    public class Test {
        public static void main(String[] args) {
            List<Person> perosnList = new ArrayList<>();
            perosnList.add(new Person("王一", 30, "中国", &#39;M&#39;));
            perosnList.add(new Person("张三", 19, "美国", &#39;F&#39;));
            perosnList.add(new Person("李四", 29, "日本", &#39;F&#39;));
            perosnList.add(new Person("小美", 74, "英国", &#39;M&#39;));
            perosnList.add(new Person("熊二", 15, "意大利", &#39;F&#39;));
            perosnList.add(new Person("熊大", 66, "韩国", &#39;F&#39;));
            //返回年龄大于20岁的学生集合
            System.out.println("返回年龄大于20岁的学生集合");
            perosnList.stream().filter(p -> p.getAge() > 20).forEach(System.out::println);
            //返回年龄大于50岁的学生集合
            System.out.println("返回年龄大于50岁的集合");
            List<Person> list = perosnList.stream().filter(p -> p.getAge() > 50).collect(Collectors.toList());
            System.out.println(list);
            //返回年龄大于20岁的中国学生
            System.out.println("返回年龄大于20岁的中国人");
            perosnList.stream().filter(p -> p.getAge() > 20).filter(p -> p.getCountry().equals("韩国")).forEach(System.out::println);
            //年龄大于20  中国  性别M
            System.out.println("返回年龄大于20  中国  性别M");
            perosnList.stream().filter(p -> p.getAge() > 20 && p.getCountry().equals("中国") && p.getSex() == &#39;M&#39;).forEach(System.out::println);
        }
    }

    結果を確認します:

    20 歳以上の学生のコレクションを返す

    情報テーブル: {name='Wang Yi', age=30, country='China', sex=M}
    情報テーブル: {name='李思', age=29, country='日本', sex=F}
    情報テーブル: {name='Xiaomei', age=74, country='UK', sex=M }
    情報テーブル: {name='Xiong Da', age=66, country='Korea', sex=F}
    50 歳以上の人々のコレクションを返します
    [情報テーブル: { name='小美人', age=74, country='UK', sex=M}, 情報テーブル: {name='Xiong Da', age=66, country='South Korea', sex=F}]
    20 歳以上の年齢を返す中国
    情報テーブル: {name='Xiong Da', age=66, country='韓国', sex=F}
    20 歳以上の年齢を返す中国性別M
    情報テーブル: { name='Wang Yi', age=30, country='China', sex=M}

    概要:

    ストリームを使うと簡単に操作できる 配列やコレクションとラムダ式を組み合わせてすっきりした式にできる 実はJavaから出てきた新機能なので便利なはずです。

    3. ストリーム マップ マッピング ストリーム

    public class Test {
        public static void main(String[] args) {
            //map的作用是迭代取到每个list元素,再通过map里面的函数进行相应的操作
            List<String> list1 = Arrays.asList("a","bb","ccc","dddd");
            //通过map取到每个集合元素的长度并返回
            Stream<Integer> stream = list1.stream().map(p->p.length());
            stream.forEach(System.out::println);
            System.out.println("----------------");
            List<String> userList = new ArrayList<>();
            userList.add("周杰伦.tom");
            userList.add("尼古拉斯.赵四");
            userList.add("牛顿.巴基斯");
            userList.add("赵少华.思密达");
            List<String> uList = userList.stream().map(p->p.substring(p.indexOf(".")+1,
                    p.length())).collect(Collectors.toList());
            System.out.println(uList.toString());
        }
    }

    出力:

    1

    2
    3
    4
    ----------------
    [tom, Zhao Si, Bakis, Smecta]

    4. ストリーム検索と # もあります## 一致する

    Stream の anyMatch(Predicate predicate)

    メソッド:

    このストリーム内の要素が指定された単語と一致するかどうかを返します

    デモ:

    public class Test {
        public static void main(String[] args) {
            List<String> list = Arrays.asList("周杰伦","王力宏","孙燕姿","林俊杰");
            boolean flag1 = list.stream().anyMatch(ele->ele.contains("燕"));
            System.out.println("有没有名字包含燕的同学:"+flag1);
            //判断开头:
            boolean flag2 = list.stream().anyMatch(ele->ele.startsWith("王"));
            System.out.println("有没有名字开头是王的同学:"+flag2);
            //判断结尾:
            boolean flag3 = list.stream().anyMatch(ele->ele.endsWith("杰"));
            System.out.println("有没有名字结尾是杰的同学:"+flag3);
            // anyMatch是匹配所有的,要满足条件
            boolean flag4 = list.stream().anyMatch(ele->ele.length()>2);
            System.out.println("所有同学的名字都是两个字以上的吗"+flag4);
            boolean flag5 = list.stream().anyMatch(ele->ele.startsWith("王"));
            System.out.println("所有同学的名字都有王吗?"+flag5);
            //noneMatch
            boolean flag6 = list.stream().noneMatch(ele->ele.contains("燕"));
            System.out.println("集合中都没有包含&#39;燕&#39;这个字吗"+flag5);
        }
    }

    出力:

    名前に「Yan」が含まれる生徒はいますか: true
    クラスメートはいますか名前が Wang で始まる人: true

    名前が Jie で終わるクラスメートはいますか: true
    すべての生徒の名前に 2 文字以上の文字が付いていますか? true
    すべての生徒の名前に Wang が付いていますか? true
    このコレクションには「Yan」という単語が含まれていません。 true

    anyMatch() のメソッドを使用すると、このストリームの情報と簡単に照合できます。

    以上がJava でのストリーム フロー インスタンスの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

    この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

    適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

    この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

    カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

    この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

    キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

    この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

    Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

    Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    MantisBT

    MantisBT

    Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

    DVWA

    DVWA

    Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

    SecLists

    SecLists

    SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。