[モダンジャワ動作]ch.1

9065 ワード

Ch.1 Java 8,9,10,11:何があったの?


JAva 8が現れる前はどうなりますか?


歴史の流れ.


次のコードは、アップルのリストを重量順に並べたコードです.
Collections.sort(inventory,new Comparator<Apple>(){
	public int compare(int a, int b){
    	return a.getWeight().compareTo(b.getWeight());
    }
});
しかし,このような4行コードにjava 8が出現し,以下のように実現できる.
inventory.sort(comparing(Apple::getWeight));
以上のコードの説明は後で本で紹介します!
  • ハードウェアの変更
    マルチコアCPUの大衆化のようなハードウェアの変化はjava 8に影響を及ぼした.
    Java 8が登場する前に、残りのコアを活用したい場合は、スレッドを使用したほうがいいです.ただし、スレッドを使用すると管理が難しく、多くの問題が発生する可能性があります.
    Javaは、このような並列実行環境を管理しやすくし、エラーの少ない方向に進化させるように努力しています.
    JAva 5およびjava 7には、パラレル実行環境をサポートするツールも導入されています.しかし、開発者が使用するのは容易ではありません.JAva 8は、パラレル実行への新しい、簡単なアクセスをサポートします.
  • ストリームAPI


    ストリームAPIは、データベースクエリ言語で式を処理するように、並列演算をサポートするAPIです.

  • Streamとは?
    連続データ・アイテムのセットを一度に作成します.
    それを自動車メーカーにたとえる.自動車生産工場の各作業場は自動車の修理を受けた後、次の作業場に他の作業を処理する.複数の自動車からなる生産ラインをストリームと理解することができる.

  • ストリームAPIのコア
    JAva 8にjavaがあります.util.ストリームAPIがストリームパケットに追加されました.
    ストリームAPIの核心は,我々が行うべき仕事を高標準のストリームとして抽象化し,一連のストリームとして処理できることである.また、ストリームラインを使用して、入力部を複数のCPUコアに簡単に割り当てることもできます.スレッドを使用せずに無料で並列性を得ることができます.
  • ストリームAPIは、「コレクションの処理中に発生するあいまいさと重複コードの問題」と「マルチコアの使用困難」の2つの問題を解決します.既存のコレクションでは,データを処理する際に重複するパターンが多い.したがって,ライブラリがこのような重複パターンを提供できればよいという考えがある.
    反復モードで所定の条件に従ってデータをフィルタリングしたり、データを抽出したり、データをグループ化したりする機能を有する.
    コレクションをストリームに変換し、並列に処理してリストに再復元することで、データのフィルタリングとパケット化を迅速に行うことができます.

    メソッドにコードを渡す


    Java 8から、コードの一部のAPIをユーザに渡すことができる.sortの方法を考えてみましょう.
    例えば2013 UK 00012014 US 0002...等形式の請求書IDがあるとします.最初の4つの数字は年を表し、後の2つの数字は国コードを表し、最後の4つの数字は顧客IDを表します.この請求書IDを顧客IDまたは国コード順にソートする必要があります.すなわち、sortは、sortが顧客IDまたは国コードを使用して請求書IDをソートするためにsortに個別のコードを提供する必要がある.
    Java 8までは、メソッドを他のメソッドに渡すことはできません.しかしながら、java 8は、他の方法の引き継ぎに方法を渡す機能を提供する.これを動作パラメータ化と呼ぶ.

    compareUsingCustomerIdを使用してsortの動作をパラメータ化できます.動作パラメータ化は、後でより詳細に説明します.

    メザーとランダを一級公民とする

  • 日当とは何ですか.
    Javaプログラムで操作できる値を考えてみましょう.1つ目はintフォーマット、doubleフォーマットなどのデフォルト値です.第二に、オブジェクトも値です.その後、関数はこれらの値を変更できます.このように関数で値を変えることができるものを1級と言います.Javaプログラミング言語の異なる構造体(メソッド、クラスなど)は、値を表す構造に役立つ可能性があります.しかし、すべての構造体を自由に伝達することはできない.このように伝えられない構造体は2級である.つまり、方法や等級などは二級公民です.これら自体は無価です.
    JAva 8は、2級市民を1級市民に変える機能を追加した.
  • 次のコードは、isHidden結果をFile Filterオブジェクトの内部に配置します.ListFilesメソッドが渡すコード.
    File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
    	public boolean accept(File file){
        	return file.isHidden();
        }
    });
    Java 8では、上記のコードを1行に変換できます.
    File[] hiddenFiles = new File(".").listFiles(File::isHidden);
    使用できるようになりました:(このメソッドを値として使用することを示します)listFilesにメソッドを渡します.
  • ランダ:匿名関数
    Java 8では、メソッドを1級値と見なすだけでなく、ramda(または匿名関数を含む)関数も値と見なす.定義するたびに1、2回しか使用しない方法は面倒です.Java 8では,匿名関数やramdaという新しい概念を用いてこの問題を解決する.
    Appleクラスのリストにすべてのグリーンアップルを返す方法(isGreenApple)と、特定重量以上のアップルをフィルタリングする方法(isHeavyApple)があるとします.
  • filterApples(inventory, (Apple a) -> GREEN.equals(a.getColor());
    
    filterApples(inventory, (Apple a) -> a.getWeight() > 150);
    
    ランダを利用して上記のように簡潔にコードを書くことができます.すなわち,1回のみ使用する方法を個別に定義する必要はない.

    エラーメソッド

  • ディポルト・メイサーとは?
    JAva 8は、インタフェースを簡単に変更できるデバッグ方法をサポートしています.デフォルトの方法は、特定のプログラムを実装するのに役立つ機能ではなく、将来のプログラムに変更しやすい環境を提供する機能です.
    インタフェースに新しいメソッドを追加する場合、インタフェースのインプリメンテーションボディは、新しい追加メソッドを実装する必要があります.実際には,言語設計者は集合インタフェースのすべてのコードを実現する責任を負うことはできない.したがってjava 8は、実装クラスで実装する必要のない方法をインタフェースに追加する機能を提供する.デフォルトの方法では、既存のコードに触れずに元のインタフェース設計を自由に拡張できます.defaultという新しいキーワードをサポートします.
  • 整理する


    今からあの有名な「モダンジャワアクション映画」を読み始めました!盲目的な流れがシンプルなので使いましょう!!それだけでなく、Stream APIの誕生背景も知り、Javaの歴史も知り、とても面白かったです.次の章でもJavaの進化(?)がわかります好奇心がある.そして确かにブログを作って、勉强したことを私のものにしたような気がします.