Java8 - ラムダ和ストリーム

1.はじめに

本論文では、抽象度の高い簡素化、開発、生産性の向上を提供するために、ラムダ式とストリームAPIの2つの大主要な新機能のJava8、2を説明します。

2.ラムダ式

2.1ラムダ式の知人

使用して、スレッドを作成してRunnable、匿名の内部クラスを

スレッドスレッド=新しいスレッド(新しいRunnableを(){ 
            @Override 
            ます。public void実行(){ 
                System.out.printlnは( "こんにちはアロン。"); 
            } 
        });

  

問題を見てみると、実際には、非常に明白な欠点ではありません:あまりにも多くのテンプレート構文、文の本当の意味だけのビジネスSystem.out.println("Hello Aron.")、そのように、私たちも真剣に読書のコードに干渉しています。

導入lambda式は、次のように書くことができます

スレッドスレッド=新しいスレッド(() - >のSystem.out.println( "こんにちはアロン。"));

 

2.ストリームの流れ

2.1はじめに

ストリーム(ストリーム)は、新機能Java8で、抽象度の高いから操作するのセットにプログラマが可能になります。SQLストアドプロシージャと同様のアイデア、で、いくつかのステップがあります。

  1. 本当に実行していない、これだけで定義されています。いくつかの操作コレクションの注意を定義します
  2. トリガーの実行、結果を得ます
  3. さらなる処理、スクリーニング、印刷、使用の結果

その中でも、カスタムアクションの最初のステップは、遅延評価と呼ばれるルーチン(リターンにあなたを与えるStream)が、戻り値の結果を実行しません。

先行評価と呼ばれるステップ2トリガー操作は、この男は先に行って、その結果(リターン結果データ)に飛びました。

ステップ3スクリーニングSQLに似たwhere句、さらにフィルタ結果。

2.2ストリームAPI

Stream クラスはでありjava.util.stream、パッケージの多くの方法で、次のリストを説明するために、より重要な方法のいくつかと、Java8コアクラスの1つです。もっとISは、最初に使用する基本的な使い方を習得しようと、気持ちを見つけ、彼らの認識を一致させることはできません任意のコースは、より簡単です開始し、ゆっくりと自然にアップします。

2.2.1 Stream.of(T ... T)

使用するためにはStream、それが最初に作成しなければならないStringのタイプをStream

Stream<String> StrStream = Stream.of("a", "b");

2.2.2 Stream.collect(コレクタ<?スーパーT、A、R>集電体)

使用コレクタはCollectorなりStrStreamおなじみのコレクションに変換しますCollection

List<String> collect = StrStream.collect(Collectors.toList());


2.2.3 Stream.map(機能<?スーパーT、?拡張R>マッパー)

リテラルの理解から、いわゆるマップは、マッピングされています。これは、オブジェクト・リレーショナル・マッピングを指し

オブジェクトの組み合わせで、このような性質のコレクションマッピング:

List<String> names = Stream.of(new Student("zhangSan"), new Student("liSi")) .map(student -> student.getName()) .collect(toList());

小文字から大文字にマップされます。

List<String> collected = Stream.of("a", "b", "hello") .map(string -> string.toUpperCase()) .collect(toList());

スペースに基づいて、文字列配列に文字列の流れ

Stream<String> stringStream = Stream.of("Hello Aron.");
Stream<String[]> stringArrayStream = stringStream.map(word -> word.split(" "));
 

2.2.4 Stream.filter(述語<?スーパーT>述語)

filter名前が示すように、フィルタをスクリーニング。ここで、インターフェースは、選択された要素の条件を満足するパラメータ条件の関数であります

// 19歳以上の学生のスクリーニング
一覧<学生> STU = Stream.of(新新学生( "zhangsan"、19)、新新学生( "リージ")、20)
                        .filter(学生- > student.getAge()> 19)
                        .collect(ToListメソッド())。

 

2.2.5 Stream.flatMap(機能<?スーパーT、?延びストリーム<?延びR >>マッパー)

flatMapフラットマッピング、データ要素のアレイ即ちStream単一の要素に

ストリームの<string> Stream.ofにstringstream =( "アロンハロー"); 
//戻り値が配列され
たストリームの<string []> = stringArrayStream stringStream.map(ワード- > word.split( "")); 
// flatMap組み込まれたマッピング要素平坦化後の
ストリームの<string> flatResult = stringArrayStream.flatMap( ARR - > Arrays.stream(ARR))を

2.2.6 Stream.max(コンパレータ<?スーパーT>コンパレータ)

maxそれは次のように最大であるSQLの関数max()、最も特定の条件に応じて選択された値からデータ

//最古/小学生スクリーニング
ストリーム<学生> studentStream = Stream.of(新新学生( "zhangSam"、19)、新新学生( "リージ"、20)); 
(オプション<学生>最大= studentStream.max Comparator.comparing(学生- > student.getAge())); 
//オプション<学生>最大= studentStream.min(Comparator.comparing(学生- > student.getAge())); 
//最大年齢/小学生
学生の学生= max.get();

 

2.2.7 Sream.reduce(T同一性、BinaryOperator <T> binaryOperator)

reduce操作から値を生成する値のセットを達成するために、上記のmaxmin実際にreduce動作します。

パラメータはIdentity 初期値を表し、

パラメータはbinaryOperator、関数のインタフェースである二項演算子を表し、それは数学的な操作のために使用することができます

//使用を減らす()(本番環境のために推奨されていない)合計
(1,2 ,. 3)Stream.ofカウントINT = .reduce(0、(ACC、要素) - >要素+ ACC)。

上記のコードは、展開reduce() 操作を

BinaryOperator <整数> =アキュムレータ(ACC、要素) - > ACC +要素。
INTカウント= accumulator.apply(accumulator.apply(accumulator.apply(0、1)、2)、3)。

2.2.8統合運用

//クラスメート辞書のソート順を検索し、キーを押し、すべてが張を某、保存されたリスト
一覧<学生> newList = studentList.Stream()
            .filter(学生- 。> Student.getName()のstartsWith( "張"))
            .sorted( Comparator.comparing(学生- > student.getName())
            .collect(ToListメソッド());

  

 

 







おすすめ

転載: www.cnblogs.com/jiehanshi/p/12125677.html