目次
ストリーム フロー
1. ストリームとは:
2. ストリームの作成:
ホームページ Java &#&チュートリアル Java でのストリーム フロー インスタンスの分析

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

May 09, 2023 pm 04:10 PM
java stream

    ストリーム フロー

    前回の記事では、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 までご連絡ください。

    ホット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ヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Javaの平方根 Javaの平方根 Aug 30, 2024 pm 04:26 PM

    Java の平方根のガイド。ここでは、Java で平方根がどのように機能するかを、例とそのコード実装をそれぞれ示して説明します。

    Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

    Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

    Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

    Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

    ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

    Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

    Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

    Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

    Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

    この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

    Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

    Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

    Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

    Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

    See all articles