JDK8(三)JavaのストリームAPI

まず、JavaのストリームAPIは何ですか?

1.1はじめに

Javaでインターフェイスをプログラムストリーム機能のJava 8は、最初に導入し、そして一緒に大幅処理技術開放型データの収集効率を容易にするJava開発及びラムダのランドマークの特徴にしています。
Javaのストリームは、パイプライン、パイプ内のデータのデータパイプラインを通る流れ、および操作された後、次のに流入します。
含む機能パイプライン:フィルタ(フィルタ)、ソート(並べ替え)地図(マップ)、又は、等次いで、パイプラインを処理するJavaストリーム・データのセットを介して、または別の基のセットのデータ出力に変換されます。
ここに画像を挿入説明

第二に、どのようにストリームの流れを取得するには?

(以下の完全なコード、クラス内部に配置されました)

package com.zicheng.stream;

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

/**
 * 子诚
 * Description:集合、map、数组 获取流
 * 时间:2020/4/1 16:44
 */
public class Demo_GetStream {
    public static void main(String[] args) {
        //list获取Stream流
        List<String> list = new ArrayList<>();
        Stream<String> listStream = list.stream();

        //set获取Stream流
        Set<String> set = new HashSet<>();
        Stream<String> setStream = set.stream();

        //获取Map的Stream流
        Map<String, String> map = new HashMap<>();
        //获取map中 key 的Stream流
        Stream<String> keyStream = map.keySet().stream();
        //获取map中 value 的Stream流
        Stream<String> valueStream = map.values().stream();
        //获取 entry 的Stream流
        Stream<Map.Entry<String, String>> entryStream = map.entrySet().stream();

        //数组获取Stream流
        String[] array = {"河南省", "新乡市", "河南师范大学"};
        Stream<String> arrayStream = Stream.of(array);
    }
}

2.1、コレクションのパイプラインの流れがに変換され、

注:
のjava.util.Collectionは、すべてのクラスが取得ストリームを実現できるように、フローストリームを取得するために使用されるデフォルトのインターフェースのメソッドに追加しました。

キーコード:
list.stream(); set.stream();

2.2、地図のパイプラインの流れがに変換され、

注:
サブインターフェースjava.util.Mapインターフェースコレクションではなく、単一のデータ構造はKVストリーム要素を適合していないことを特徴とする、対応するストリームを得るために必要であり、それぞれ、ポイントキー、値または入力を必要とします。

キーコード:
map.keySet()ストリーム();.
Map.values()ストリーム();.
EnumMap.entrySet()ストリーム();.

3.3、流れ管のアレイに変換され

注:
デフォルトの方法、静的メソッドのストリームインタフェースを追加することはできませんので、配列オブジェクト(コレクション)またはマップ(地図)配列が、が、設定されていない場合

キーコード:
Stream.of(配列);

3.4、パイプラインの流れにテキストファイル

パイプラインの流れのためにテキストファイルを変換してFiles.lines方法は、図Paths.get()メソッドは、ファイルの効果を得ることである、APIは、Java NIOです!

Stream<String> lines = Files.lines(Paths.get("file.txt"));

第三に、一般的な方法

3.0、すべてのコード

package com.zicheng.stream;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;

import static java.util.stream.Collectors.toList;

/**
 * 子诚
 * Description:Stream中的常用方法
 * 时间:2020/4/1 18:27
 */
public class StreamFunctionDemo {
    public static void main(String[] args) {
        StreamFunctionDemo demo = new StreamFunctionDemo();
        //方法1:逐一处理:forEach
        demo.test_forEach();

        //方法2:过滤:filter
        demo.test_filter();

        //方法3:映射:map
        demo.test_map();

        //方法4:排序:sorted
        demo.test_sorted();

        //方法6:统计个数test_count()
        demo.test_count();
        
        //方法7:测试截取:limit
        demo.test_limit();
        
        //方法8:跳过:skip
        demo.test_skip();
        
        //方法9:组合:concat
        demo.test_concat();
    }

    //方法1:逐一处理:forEach
    void test_forEach() {
        String[] array = {"河南省", "新乡市", "河南师范大学"};
        Stream<String> arrayStream = Stream.of(array);
        /**
         * parallel()函数表示对管道中的元素进行并行处理而不是串行处理。
         * 但是这样就有可能导致管道流中后面的元素先处理,前面的元素后处理,也就是元素的顺序无法保证。
         * 数据量大的话,就能观察到数据顺序是无法保证的.
         * 不想用,不用
         */
        arrayStream.parallel().forEach(item -> System.out.println(item));

        arrayStream.forEach(item -> {
            //在这个地方可以对每个item进行操作
            System.out.println(item);
        });
    }

    //方法2:过滤:filter
    void test_filter() {
        // 获取以“河南”开头的数据项
        List<String> nameStrs = Arrays.asList("河南省", "新乡市", "河南师范大学");
        List<String> list = nameStrs.stream()
                .filter(s -> s.startsWith("河南"))
                // 转换成了List的数据结构,方便接收和打印
                .collect(toList());
        System.out.println(list);
    }

    //方法3:映射:map;将集合中的每一个字符串全部大写
    void test_map() {
        // Arrays.asList(),将数组转换为字符串
        List<String> players = Arrays.asList("Kobe Bean Bryant", "James", "Harden", "Curry", "Durant");
        List<String> list = players.stream()
                //s-> s.toUpperCase(),可以替换为String::toUpperCase(方法引用)
                .map(String::toUpperCase)
                // 转换成了List的数据结构,方便接收和打印
                .collect(toList());
        System.out.println(list);
    }

    //方法4:排序:sorted
    void test_sorted() {
        List<Integer> nums = Arrays.asList(2, 6, 5, 4, 8, 7, 9);
        //sorted,默认是升序
        List<Integer> list = nums.stream().sorted().collect(toList());
        System.out.println(list);
        //如果想要降序的话
        Collections.reverse(list);
        System.out.println(list);
    }

    //方法5:转换:collect
    void test_collect() {
        //list,set可以互转。
        //list转成map的话,index当做key,元素就当做value
        //具体,有时间再写
    }

    //方法6:统计个数:count
    void test_count() {
        List<String> school = Arrays.asList("河南省", "新乡市", "河南师范大学");
        long count = school.stream()
                .filter(s -> s.startsWith("河南"))
                .count();
        //打印个数
        System.out.println(count);
    }

    //方法7:截取:limit
    void test_limit() {
        List<String> school = Arrays.asList("河南省", "新乡市", "河南师范大学");
        List<String> limit = school.stream()
                .limit(2)
                .collect(toList());
        //打印结果
        System.out.println(limit);
    }

    //方法8:跳过:skip
    void test_skip() {
        List<String> school = Arrays.asList("河南省", "新乡市", "河南师范大学");
        List<String> skip = school.stream()
                //跳过前两个
                .skip(2)
                .collect(toList());
        //打印结果
        System.out.println(skip);
    }

    //方法9:组合:concat
    void test_concat() {
        List<String> country = Arrays.asList("地球", "中华人民共和国");
        List<String> school = Arrays.asList("河南省", "新乡市", "河南师范大学");
        //将上面的两个集合拼接
        List<String> address = Stream.concat(country.stream(), school.stream())
                .collect(toList());
        //打印结果
        System.out.println(address);
    }
}


3.1、1つの工程ずつ:forEash

注:
名前と操作ものの、すべて等のため、原理的には同じではありません。
流通管は、1つのトラバースあります。

//方法1:逐一处理
 void test_forEach() {
        String[] array = {"河南省", "新乡市", "河南师范大学"};
        Stream<String> arrayStream = Stream.of(array);
        /**
         * parallel()函数表示对管道中的元素进行并行处理而不是串行处理。
         * 但是这样就有可能导致管道流中后面的元素先处理,前面的元素后处理,也就是元素的顺序无法保证。
         * 数据量大的话,就能观察到数据顺序是无法保证的.
         * 不想用,不用
         */
        arrayStream.parallel().forEach(item -> System.out.println(item));

        arrayStream.forEach(item -> {
            //在这个地方可以对每个item进行操作
            System.out.println(item);
        });
    }

ここに画像を挿入説明

3.2、フィルター:フィルター

注:
フィルタ法により、ストリームが別のものに変換されたストリームのサブセット

//方法2:过滤
void testFilter() {
    List<String> nameStrs = Arrays.asList("河南省", "新乡市", "河南师范大学");
    List<String> list = nameStrs.stream()
            .filter(s -> s.startsWith("河南"))
            //转换成了List的数据结构,方便接受和打印
            .collect(toList());
    System.out.println(list);
}

ここに画像を挿入説明

3.3マッピング:マップ

注:
あなたが別のストリームにフロー要素をマップする必要がある場合は、マップ・メソッドを使用することができます。

	//方法3:映射:map;将集合中的每一个字符串全部大写
    void test_map() {
        // Arrays.asList(),将数组转换为字符串
        List<String> players = Arrays.asList("Kobe Bean Bryant", "James", "Harden", "Curry", "Durant");
        List<String> list = players.stream()
                //s-> s.toUpperCase(),可以替换为String::toUpperCase(方法引用)
                .map(String::toUpperCase)
                // 转换成了List的数据结构,方便接收和打印
                .collect(toList());
        System.out.println(list);
    }

ここに画像を挿入説明

3.4、ソート:ソートを

	//方法4:排序:sorted
    void test_sorted() {
        List<Integer> nums = Arrays.asList(2, 6, 5, 4, 8, 7, 9);
        //sorted,默认是升序
        List<Integer> list = nums.stream().sorted().collect(toList());
        System.out.println(list);
        //如果想要降序的话
        Collections.reverse(list);
        System.out.println(list);
    }

ここに画像を挿入説明

3.5変換:収集

一般的に、既に上記に使用されます。

	//方法5:转换:collect
    void test_collect() {
        //list,set可以互转。
        //list转成map的话,index当做key,元素就当做value
        //具体,有时间再写
    }

3.6、統計の数:数

//方法6:统计个数:count
    void test_count() {
        List<String> nameStrs = Arrays.asList("河南省", "新乡市", "河南师范大学");
        long count = nameStrs.stream()
                .filter(s -> s.startsWith("河南"))
                .count();
        //打印个数
        System.out.println(count);
    }

ここに画像を挿入説明

3.7傍受:制限

	//方法7:测试截取:limit
    void test_limit(){
        List<String> school = Arrays.asList("河南省", "新乡市", "河南师范大学");
        List<String> limit= school.stream()
        		// 截取前两个
                .limit(2)
                .collect(toList());
        //打印结果
        System.out.println(limit);
    }

ここに画像を挿入説明

3.8、ジャンプ:スキップ

	//方法8:跳过:skip
    void test_skip(){
        List<String> school = Arrays.asList("河南省", "新乡市", "河南师范大学");
        List<String> skip = school.stream()
                //跳过前两个
                .skip(2)
                .collect(toList());
        //打印结果
        System.out.println(skip);
    }

ここに画像を挿入説明

3.9、ステッチの組み合わせ:連結

	//方法9:组合:concat
    void test_concat() {
        List<String> country = Arrays.asList("地球", "中华人民共和国");
        List<String> school = Arrays.asList("河南省", "新乡市", "河南师范大学");
        //将上面的两个集合拼接
        List<String> address = Stream.concat(country.stream(), school.stream())
        .collect(toList());
        //打印结果
        System.out.println(address);
    }

ここに画像を挿入説明

第四に、推奨リンク

サーブレゴます。https://ke.qq.com/teacher/316518226(テンセント教室、うまく話す、波を推奨)
コケティッシュ長引く兄ます。https://ke.qq.com/teacher/1579106394(テンセント教室、変な味、知識が豊富)

公開された44元の記事 ウォンの賞賛5 ビュー886

おすすめ

転載: blog.csdn.net/qq_40634246/article/details/105248150