Java 8 - クイックガイド
Java 8 - 概要
JAVA 8 は、JAVA プログラミング言語開発の主要機能リリースです。その最初のバージョンは 2014 年 3 月 18 日にリリースされました。Java 8 リリースでは、Java は関数型プログラミング、新しい JavaScript エンジン、日時操作用の新しい API、新しいストリーミング API などのサポートを提供しました。
新機能
- <リ>
ラムダ式 − Java に関数処理機能を追加します。
<リ>メソッド参照 − 関数を直接呼び出すのではなく、名前で参照する。関数をパラメーターとして使用する。
<リ>デフォルトの方法 − デフォルトのメソッド実装を持つインターフェース。
<リ>新しいツール − 依存関係を把握するために、「jdeps」のような新しいコンパイラ ツールとユーティリティが追加されます。
<リ>ストリーム API − パイプライン処理を容易にする新しいストリーム API。
<リ>日時 API − 改善された日時 API。
<リ>オプション − null 値を適切に処理するためのベスト プラクティスを重視します。
<リ>Nashorn、JavaScript エンジン − JavaScript コードを実行するための Java ベースのエンジン。
次のコード スニペットを検討してください。
ライブデモimport java.util.Collections; import java.util.List; import java.util.ArrayList; import java.util.Comparator; public class Java8Tester { public static void main(String args[]) { List<String> names1 = new ArrayList<String>(); names1.add("Mahesh "); names1.add("Suresh "); names1.add("Ramesh "); names1.add("Naresh "); names1.add("Kalpesh "); List<String> names2 = new ArrayList<String>(); names2.add("Mahesh "); names2.add("Suresh "); names2.add("Ramesh "); names2.add("Naresh "); names2.add("Kalpesh "); Java8Tester tester = new Java8Tester(); System.out.println("Sort using Java 7 syntax: "); tester.sortUsingJava7(names1); System.out.println(names1); System.out.println("Sort using Java 8 syntax: "); tester.sortUsingJava8(names2); System.out.println(names2); } //sort using java 7 private void sortUsingJava7(List<String> names) { Collections.sort(names, new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.compareTo(s2); } }); } //sort using java 8 private void sortUsingJava8(List<String> names) { Collections.sort(names, (s1, s2) -> s1.compareTo(s2)); } }
プログラムを実行すると、次の結果が得られます。
Sort using Java 7 syntax: [ Kalpesh Mahesh Naresh Ramesh Suresh ] Sort using Java 8 syntax: [ Kalpesh Mahesh Naresh Ramesh Suresh ]
ここで sortUsingJava8() メソッドは、並べ替え基準を取得するためにパラメーターとしてラムダ式を含む並べ替え関数を使用します。
Java 8 - 環境設定
ローカル環境のセットアップ
Java プログラミング言語用に独自の環境をセットアップする場合は、このセクションでプロセス全体を説明します。以下の手順に従って、Java 環境をセットアップしてください。
Java SE は、次のリンクから無料でダウンロードできます −
https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html
お使いのオペレーティング システムに基づいたバージョンをダウンロードします。
指示に従って Java をダウンロードし、.exe を実行します。 マシンに Java をインストールします。マシンに Java をインストールしたら、正しいインストール ディレクトリを指すように環境変数を設定する必要があります。
Windows 2000/XP のパスの設定
Java を c:\Program Files\java\jdk ディレクトリにインストールしたと仮定します −
- <リ>
[マイ コンピュータ] を右クリックし、[プロパティ] を選択します。
<リ>[詳細] タブの下にある [環境変数] ボタンをクリックします。
<リ>ここで、'Path' 変数を変更して、Java 実行可能ファイルへのパスも含めるようにします。たとえば、パスが現在「C:\WINDOWS\SYSTEM32」に設定されている場合、パスを「C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin」に変更します。
Windows 95/98/ME のパスの設定
Java を c:\Program Files\java\jdk ディレクトリにインストールしたと仮定します −
- <リ>
「C:\autoexec.bat」ファイルを編集し、最後に次の行を追加します −
SET PATH=%PATH%;C:\Program Files\java\jdk\bin
Linux、UNIX、Solaris、FreeBSD のパスの設定
環境変数 PATH は、Java バイナリがインストールされている場所を指すように設定する必要があります。これに問題がある場合は、シェルのドキュメントを参照してください。
たとえば、bash をシェルとして使用する場合、「.bashrc:export PATH=/path/to/java:$PATH」の最後に次の行を追加します。
人気のある Java エディタ
Java プログラムを作成するには、テキスト エディタが必要です。さらに洗練された IDE が市場に出回っています。しかし、今のところ、次のいずれかを検討できます −
- <リ>
メモ帳 − Windows マシンでは、メモ帳 (このチュートリアルで推奨) や TextPad などの単純なテキスト エディターを使用できます。
<リ>ネットビーンズ − オープンソースで無料の Java IDE です。 https://netbeans.org/index.html からダウンロードできます。
<リ>エクリプス − Eclipse オープンソース コミュニティによって開発された Java IDE でもあり、https://www.eclipse.org/ からダウンロードできます。
Java 8 - ラムダ式
ラムダ式は Java 8 で導入され、Java 8 の最大の機能であると宣伝されています。ラムダ式は関数型プログラミングを容易にし、開発を大幅に簡素化します。
構文
ラムダ式は、次の構文によって特徴付けられます。
parameter -> expression body
以下は、ラムダ式の重要な特徴です。
- <リ>
オプションの型宣言 − パラメータの型を宣言する必要はありません。コンパイラは、パラメーターの値から同じものを推測できます。
<リ>パラメーターを囲むオプションの括弧 − 括弧内に 1 つのパラメーターを宣言する必要はありません。複数のパラメータの場合、括弧が必要です。
<リ>オプションの中括弧 − 本体に 1 つのステートメントが含まれる場合、式本体で中かっこを使用する必要はありません。
<リ>オプションのリターン キーワード − 本体に値を返す単一の式がある場合、コンパイラは自動的に値を返します。式が値を返すことを示すには、中かっこが必要です。
ラムダ式の例
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモpublic class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); //with type declaration MathOperation addition = (int a, int b) -> a + b; //with out type declaration MathOperation subtraction = (a, b) -> a - b; //with return statement along with curly braces MathOperation multiplication = (int a, int b) -> { return a * b; }; //without return statement and without curly braces MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); //without parenthesis GreetingService greetService1 = message -> System.out.println("Hello " + message); //with parenthesis GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("Mahesh"); greetService2.sayMessage("Suresh"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation) { return mathOperation.operation(a, b); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Mahesh Hello Suresh
以下は、上記の例で考慮すべき重要な点です。
- <リ>
ラムダ式は、主に機能インターフェースのインライン実装、つまり単一のメソッドのみを持つインターフェースを定義するために使用されます。上記の例では、さまざまなタイプのラムダ式を使用して、MathOperation インターフェイスの操作メソッドを定義しました。次に、GreetingService の sayMessage の実装を定義しました。
<リ>ラムダ式は、匿名クラスの必要性を排除し、Java に非常にシンプルかつ強力な関数型プログラミング機能を提供します。
範囲
ラムダ式を使用すると、任意の最終変数または実質的に最終変数 (一度だけ割り当てられる) を参照できます。 2 回目に変数に値が割り当てられると、ラムダ式はコンパイル エラーをスローします。
範囲の例
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモpublic class Java8Tester { final static String salutation = "Hello! "; public static void main(String args[]) { GreetingService greetService1 = message -> System.out.println(salutation + message); greetService1.sayMessage("Mahesh"); } interface GreetingService { void sayMessage(String message); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
Hello! Mahesh
Java 8 - メソッド参照
メソッド参照は、名前でメソッドを指すのに役立ちます。メソッド参照は「::」記号で記述します。メソッド参照は、次のタイプのメソッドを指すために使用できます −
- 静的メソッド
- インスタンス メソッド
- new 演算子を使用するコンストラクタ (TreeSet::new)
メソッド参照の例
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
import java.util.List; import java.util.ArrayList; public class Java8Tester { public static void main(String args[]) { List names = new ArrayList(); names.add("Mahesh"); names.add("Suresh"); names.add("Ramesh"); names.add("Naresh"); names.add("Kalpesh"); names.forEach(System.out::println); } }
ここでは、静的メソッド参照として System.out::println メソッドを渡しています。
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
Mahesh Suresh Ramesh Naresh Kalpesh
Java 8 - 機能インターフェース
機能的インターフェースには、示す単一の機能があります。たとえば、単一のメソッド「compareTo」を持つ Comparable インターフェイスは、比較の目的で使用されます。 Java 8 では、ラムダ式で広く使用される多くの関数型インターフェイスが定義されています。以下は、java.util.Function パッケージで定義されている機能インターフェースのリストです。
Sr.No. | インターフェースと説明 |
---|---|
1 |
BiConsumer 2 つの入力引数を受け入れ、結果を返さない操作を表します。 |
2 |
BiFunction 2 つの引数を受け取り、結果を生成する関数を表します。 |
3 |
BinaryOperator 同じ型の 2 つのオペランドに対する演算を表し、オペランドと同じ型の結果を生成します。 |
4 |
BiPredicate 2 つの引数の述語 (ブール値関数) を表します。 |
5 | BooleanSupplier ブール値の結果のサプライヤーを表します。 |
6 |
消費者 単一の入力引数を受け入れ、結果を返さない操作を表します。 |
7 | DoubleBinaryOperator 2 つの double 値のオペランドに対する操作を表し、double 値の結果を生成します。 |
8 | ダブルコンシューマー 単一の double 値の引数を受け入れ、結果を返さない操作を表します。 |
9 |
ダブルファンクション double 値の引数を受け入れて結果を生成する関数を表します。 |
10 | 二重述語 1 つの double 値の引数の述語 (ブール値関数) を表します。 |
11 | ダブルサプライヤー 二重値の結果のサプライヤーを表します。 |
12 | DoubleToIntFunction double 値の引数を受け入れ、int 値の結果を生成する関数を表します。 |
13 | DoubleToLongFunction double 値の引数を受け入れ、long 値の結果を生成する関数を表します。 |
14 | DoubleUnaryOperator 二重値の結果を生成する単一の二重値オペランドに対する演算を表します。 |
15 |
関数 1 つの引数を受け取り、結果を生成する関数を表します。 |
16 | IntBinaryOperator 2 つの int 値のオペランドに対する演算を表し、int 値の結果を生成します。 |
17 | IntConsumer 単一の int 値の引数を受け入れ、結果を返さない操作を表します。 |
18 |
IntFunction int 値の引数を受け取り、結果を生成する関数を表します。 |
19 | IntPredicate 1 つの int 値の引数の述語 (ブール値関数) を表します。 |
20 | IntSupplier int 値の結果のサプライヤーを表します。 |
21 | IntToDoubleFunction int 値の引数を受け入れ、double 値の結果を生成する関数を表します。 |
22 | IntToLongFunction int 値の引数を受け入れ、long 値の結果を生成する関数を表します。 |
23 | IntUnaryOperator int 値の結果を生成する単一の int 値のオペランドに対する演算を表します。 |
24 | LongBinaryOperator long 値の 2 つのオペランドに対する演算を表し、long 値の結果を生成します。 |
25 | ロングコンシューマー 単一の長い値の引数を受け入れ、結果を返さない操作を表します。 |
26 |
長関数 long 値の引数を受け取り、結果を生成する関数を表します。 |
27 | 長い述語 1 つの長い値の引数の述語 (ブール値関数) を表します。 |
28 | ロングサプライヤー 長期的に評価される結果のサプライヤーを表します。 |
29 | LongToDoubleFunction long 値の引数を受け入れ、double 値の結果を生成する関数を表します。 |
30 | LongToInt 関数 long 値の引数を受け入れ、int 値の結果を生成する関数を表します。 |
31 | LongUnaryOperator long 値の結果を生成する 1 つの long 値オペランドに対する操作を表します。 |
32 |
ObjDoubleConsumer オブジェクト値と double 値の引数を受け入れ、結果を返さない操作を表します。 |
33 |
ObjIntConsumer オブジェクト値および int 値の引数を受け入れ、結果を返さない操作を表します。 |
34 |
ObjLongConsumer オブジェクト値と long 値の引数を受け入れ、結果を返さない操作を表します。 |
35 |
述語 1 つの引数の述語 (ブール値関数) を表します。 |
36 |
サプライヤー 結果のサプライヤーを表します。 |
37 |
ToDoubleBiFunction 2 つの引数を受け取り、double 値の結果を生成する関数を表します。 |
38 |
ToDoubleFunction double 値の結果を生成する関数を表します。 |
39 |
ToIntBiFunction 2 つの引数を受け取り、int 値の結果を生成する関数を表します。 |
40 |
ToIntFunction int 値の結果を生成する関数を表します。 |
41 |
ToLongBiFunction 2 つの引数を受け取り、long 値の結果を生成する関数を表します。 |
42 |
ToLongFunction long 値の結果を生成する関数を表します。 |
43 |
単項演算子 オペランドと同じ型の結果を生成する単一のオペランドに対する演算を表します。 |
機能インターフェースの例
Predicate
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Java8Tester { public static void main(String args[]) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); // Predicate<Integer> predicate = n -> true // n is passed as parameter to test method of Predicate interface // test method will always return true no matter what value n has. System.out.println("Print all numbers:"); //pass n as parameter eval(list, n->true); // Predicate<Integer> predicate1 = n -> n%2 == 0 // n is passed as parameter to test method of Predicate interface // test method will return true if n%2 comes to be zero System.out.println("Print even numbers:"); eval(list, n-> n%2 == 0 ); // Predicate<Integer> predicate2 = n -> n > 3 // n is passed as parameter to test method of Predicate interface // test method will return true if n is greater than 3. System.out.println("Print numbers greater than 3:"); eval(list, n-> n > 3 ); } public static void eval(List<Integer> list, Predicate<Integer> predicate) { for(Integer n: list) { if(predicate.test(n)) { System.out.println(n + " "); } } } }
ここでは、単一の入力を取り、ブール値を返す Predicate インターフェースを渡しました。
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
Print all numbers: 1 2 3 4 5 6 7 8 9 Print even numbers: 2 4 6 8 Print numbers greater than 3: 4 5 6 7 8 9
Java 8 - デフォルトのメソッド
Java 8 では、インターフェイスにデフォルト メソッドを実装するという新しい概念が導入されています。この機能は下位互換性のために追加されているため、古いインターフェースを使用して Java 8 のラムダ式機能を活用できます。
たとえば、「リスト」または「コレクション」インターフェイスには「forEach」メソッド宣言がありません。したがって、そのようなメソッドを追加すると、コレクション フレームワークの実装が壊れるだけです。 Java 8 ではデフォルト メソッドが導入されているため、List/Collection インターフェースは forEach メソッドのデフォルト実装を持つことができ、これらのインターフェースを実装するクラスは同じものを実装する必要はありません。
構文
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } }
複数のデフォルト
インターフェイスのデフォルト関数では、クラスが同じデフォルト メソッドを持つ 2 つのインターフェイスを実装している可能性があります。次のコードは、このあいまいさを解決する方法を説明しています。
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } } public interface fourWheeler { default void print() { System.out.println("I am a four wheeler!"); } }
最初の解決策は、デフォルトの実装をオーバーライドする独自のメソッドを作成することです。
public class car implements vehicle, fourWheeler { public void print() { System.out.println("I am a four wheeler car vehicle!"); } }
2 番目の解決策は、super を使用して指定されたインターフェイスのデフォルト メソッドを呼び出すことです。
public class car implements vehicle, fourWheeler { public void print() { vehicle.super.print(); } }
静的デフォルト メソッド
インターフェイスは、Java 8 以降の静的ヘルパー メソッドを持つこともできます。
public interface vehicle { default void print() { System.out.println("I am a vehicle!"); } static void blowHorn() { System.out.println("Blowing horn!!!"); } }
デフォルト メソッドの例
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモpublic class Java8Tester { public static void main(String args[]) { Vehicle vehicle = new Car(); vehicle.print(); } } interface Vehicle { default void print() { System.out.println("I am a vehicle!"); } static void blowHorn() { System.out.println("Blowing horn!!!"); } } interface FourWheeler { default void print() { System.out.println("I am a four wheeler!"); } } class Car implements Vehicle, FourWheeler { public void print() { Vehicle.super.print(); FourWheeler.super.print(); Vehicle.blowHorn(); System.out.println("I am a car!"); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
I am a vehicle! I am a four wheeler! Blowing horn!!! I am a car!
Java 8 - ストリーム
ストリームは、Java 8 で導入された新しい抽象レイヤーです。ストリームを使用すると、SQL ステートメントに似た宣言的な方法でデータを処理できます。たとえば、次の SQL ステートメントを考えてみましょう。
SELECT max(salary), employee_id, employee_name FROM Employee
上記の SQL 式は、開発者側で計算を行わずに、最大給与従業員の詳細を自動的に返します。 Java でコレクション フレームワークを使用すると、開発者はループを使用してチェックを繰り返す必要があります。もう 1 つの懸念事項は効率です。マルチコア プロセッサは簡単に利用できるため、Java 開発者は、エラーが発生しやすい並列コード処理を作成する必要があります。
このような問題を解決するために、Java 8 ではストリームの概念が導入されました。これにより、開発者はデータを宣言的に処理し、特定のコードを記述する必要なくマルチコア アーキテクチャを活用できます。
ストリームとは?
Stream は、集計操作をサポートするソースからの一連のオブジェクトを表します。以下はストリームの特徴です −
- <リ>
要素のシーケンス - ストリームは、特定のタイプの要素のセットを連続して提供します。ストリームは、必要に応じて要素を取得/計算します。要素を保存することはありません。
<リ>ソース − ストリームは、コレクション、配列、または I/O リソースを入力ソースとして受け取ります。
<リ>集計操作 − ストリームは、フィルター、マップ、制限、削減、検索、一致などの集計操作をサポートします。
<リ>パイプライン - ストリーム操作のほとんどは、結果をパイプライン化できるようにストリーム自体を返します。これらの操作は中間操作と呼ばれ、その機能は入力を取得して処理し、出力をターゲットに返すことです。 collect() メソッドは、ストリームの終了をマークするためにパイプライン操作の最後に通常存在する端末操作です。
<リ>自動反復 − ストリーム操作は、明示的な反復が必要なコレクションとは対照的に、提供されたソース要素に対して内部的に反復を行います。
ストリームの生成
Java 8 では、Collection インターフェイスには Stream を生成する 2 つのメソッドがあります。
- <リ>
ストリーム() − コレクションをソースとしてシーケンシャル ストリームを返します。
<リ>parallelStream() − コレクションをソースとする並列ストリームを返します。
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
forEach
ストリームは、ストリームの各要素を反復処理する新しいメソッド「forEach」を提供しました。次のコード セグメントは、forEach を使用して 10 個の乱数を出力する方法を示しています。
Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
地図
「map」メソッドは、各要素を対応する結果にマップするために使用されます。次のコード セグメントは、map を使用して一意の数字の二乗を出力します。
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); //get list of unique squares List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
フィルタ
「フィルター」メソッドは、基準に基づいて要素を除外するために使用されます。次のコード セグメントは、フィルターを使用して空の文字列の数を出力します。
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); //get count of empty string int count = strings.stream().filter(string -> string.isEmpty()).count();
制限
「制限」メソッドは、ストリームのサイズを縮小するために使用されます。次のコード セグメントは、limit を使用して 10 個の乱数を出力する方法を示しています。
Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
ソート済み
ストリームをソートするには、「sorted」メソッドが使用されます。次のコード セグメントは、10 個の乱数を並べ替えた順序で出力する方法を示しています。
Random random = new Random(); random.ints().limit(10).sorted().forEach(System.out::println);
並列処理
parallelStream は、並列処理のためのストリームの代替です。 parallelStream を使用して空の文字列の数を出力する次のコード セグメントを見てください。
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); //get count of empty string long count = strings.parallelStream().filter(string -> string.isEmpty()).count();
シーケンシャル ストリームとパラレル ストリームの切り替えは非常に簡単です。
コレクター
コレクターは、ストリームの要素に対する処理の結果を結合するために使用されます。コレクターを使用して、リストまたは文字列を返すことができます。
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); System.out.println("Filtered List: " + filtered); String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", ")); System.out.println("Merged String: " + mergedString);
統計
Java 8 では、ストリーム処理が行われているときにすべての統計を計算する統計コレクターが導入されました。
List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("Highest number in List : " + stats.getMax()); System.out.println("Lowest number in List : " + stats.getMin()); System.out.println("Sum of all numbers : " + stats.getSum()); System.out.println("Average of all numbers : " + stats.getAverage());
ストリームの例
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport java.util.ArrayList; import java.util.Arrays; import java.util.IntSummaryStatistics; import java.util.List; import java.util.Random; import java.util.stream.Collectors; import java.util.Map; public class Java8Tester { public static void main(String args[]) { System.out.println("Using Java 7: "); // Count empty strings List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); System.out.println("List: " +strings); long count = getCountEmptyStringUsingJava7(strings); System.out.println("Empty Strings: " + count); count = getCountLength3UsingJava7(strings); System.out.println("Strings of length 3: " + count); //Eliminate empty string List<String> filtered = deleteEmptyStringsUsingJava7(strings); System.out.println("Filtered List: " + filtered); //Eliminate empty string and join using comma. String mergedString = getMergedStringUsingJava7(strings,", "); System.out.println("Merged String: " + mergedString); List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); //get list of square of distinct numbers List<Integer> squaresList = getSquares(numbers); System.out.println("Squares List: " + squaresList); List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19); System.out.println("List: " +integers); System.out.println("Highest number in List : " + getMax(integers)); System.out.println("Lowest number in List : " + getMin(integers)); System.out.println("Sum of all numbers : " + getSum(integers)); System.out.println("Average of all numbers : " + getAverage(integers)); System.out.println("Random Numbers: "); //print ten random numbers Random random = new Random(); for(int i = 0; i < 10; i++) { System.out.println(random.nextInt()); } System.out.println("Using Java 8: "); System.out.println("List: " +strings); count = strings.stream().filter(string->string.isEmpty()).count(); System.out.println("Empty Strings: " + count); count = strings.stream().filter(string -> string.length() == 3).count(); System.out.println("Strings of length 3: " + count); filtered = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList()); System.out.println("Filtered List: " + filtered); mergedString = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", ")); System.out.println("Merged String: " + mergedString); squaresList = numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList()); System.out.println("Squares List: " + squaresList); System.out.println("List: " +integers); IntSummaryStatistics stats = integers.stream().mapToInt((x) ->x).summaryStatistics(); System.out.println("Highest number in List : " + stats.getMax()); System.out.println("Lowest number in List : " + stats.getMin()); System.out.println("Sum of all numbers : " + stats.getSum()); System.out.println("Average of all numbers : " + stats.getAverage()); System.out.println("Random Numbers: "); random.ints().limit(10).sorted().forEach(System.out::println); //parallel processing count = strings.parallelStream().filter(string -> string.isEmpty()).count(); System.out.println("Empty Strings: " + count); } private static int getCountEmptyStringUsingJava7(List<String> strings) { int count = 0; for(String string: strings) { if(string.isEmpty()) { count++; } } return count; } private static int getCountLength3UsingJava7(List<String> strings) { int count = 0; for(String string: strings) { if(string.length() == 3) { count++; } } return count; } private static List<String> deleteEmptyStringsUsingJava7(List<String> strings) { List<String> filteredList = new ArrayList<String>(); for(String string: strings) { if(!string.isEmpty()) { filteredList.add(string); } } return filteredList; } private static String getMergedStringUsingJava7(List<String> strings, String separator) { StringBuilder stringBuilder = new StringBuilder(); for(String string: strings) { if(!string.isEmpty()) { stringBuilder.append(string); stringBuilder.append(separator); } } String mergedString = stringBuilder.toString(); return mergedString.substring(0, mergedString.length()-2); } private static List<Integer> getSquares(List<Integer> numbers) { List<Integer> squaresList = new ArrayList<Integer>(); for(Integer number: numbers) { Integer square = new Integer(number.intValue() * number.intValue()); if(!squaresList.contains(square)) { squaresList.add(square); } } return squaresList; } private static int getMax(List<Integer> numbers) { int max = numbers.get(0); for(int i = 1;i < numbers.size();i++) { Integer number = numbers.get(i); if(number.intValue() > max) { max = number.intValue(); } } return max; } private static int getMin(List<Integer> numbers) { int min = numbers.get(0); for(int i= 1;i < numbers.size();i++) { Integer number = numbers.get(i); if(number.intValue() < min) { min = number.intValue(); } } return min; } private static int getSum(List numbers) { int sum = (int)(numbers.get(0)); for(int i = 1;i < numbers.size();i++) { sum += (int)numbers.get(i); } return sum; } private static int getAverage(List<Integer> numbers) { return getSum(numbers) / numbers.size(); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の結果が生成されるはずです-
Using Java 7: List: [abc, , bc, efg, abcd, , jkl] Empty Strings: 2 Strings of length 3: 3 Filtered List: [abc, bc, efg, abcd, jkl] Merged String: abc, bc, efg, abcd, jkl Squares List: [9, 4, 49, 25] List: [1, 2, 13, 4, 15, 6, 17, 8, 19] Highest number in List : 19 Lowest number in List : 1 Sum of all numbers : 85 Average of all numbers : 9 Random Numbers: -1279735475 903418352 -1133928044 -1571118911 628530462 18407523 -881538250 -718932165 270259229 421676854 Using Java 8: List: [abc, , bc, efg, abcd, , jkl] Empty Strings: 2 Strings of length 3: 3 Filtered List: [abc, bc, efg, abcd, jkl] Merged String: abc, bc, efg, abcd, jkl Squares List: [9, 4, 49, 25] List: [1, 2, 13, 4, 15, 6, 17, 8, 19] Highest number in List : 19 Lowest number in List : 1 Sum of all numbers : 85 Average of all numbers : 9.444444444444445 Random Numbers: -1009474951 -551240647 -2484714 181614550 933444268 1227850416 1579250773 1627454872 1683033687 1798939493 Empty Strings: 2
Java 8 - オプション クラス
Optional は、null 以外のオブジェクトを格納するために使用されるコンテナー オブジェクトです。オプションのオブジェクトは、値が存在しない null を表すために使用されます。このクラスには、null 値をチェックする代わりに、値を「使用可能」または「使用不可」として処理するコードを容易にするさまざまなユーティリティ メソッドがあります。これは Java 8 で導入され、Guava の Optional に似ています。
クラス宣言
以下は、java.util.Optional
public final class Optional<T> extends Object
クラス メソッド
Sr.No. | 方法と説明 |
---|---|
1 |
static 空の Optional インスタンスを返します。 |
2 | boolean equals(Object obj) 他のオブジェクトがこの Optional と「等しい」かどうかを示します。 |
3 |
オプションの 値が存在し、その値が特定の述語と一致する場合は、値を説明する Optional を返します。それ以外の場合は、空の Optional を返します。 |
4 | Optional flatMap(Function super T,Optional> マッパー) 値が存在する場合、提供された Optional-bearing マッピング関数をそれに適用し、その結果を返します。それ以外の場合は、空の Optional を返します。 |
5 | get() この Optional に値が存在する場合は値を返し、それ以外の場合は NoSuchElementException をスローします。 |
6 | int hashCode() 存在する場合は現在の値のハッシュ コード値を返し、値が存在しない場合は 0 (ゼロ) を返します。 |
7 | void ifPresent(Consumer super T> consumer) 値が存在する場合、その値で指定されたコンシューマーを呼び出します。それ以外の場合は何もしません。 |
8 | ブール値 isPresent() 値が存在する場合は true、そうでない場合は false を返します。 |
9 | オプションの map(Function super T,? extends U> mapper) 値が存在する場合は、指定されたマッピング関数をそれに適用し、結果が null でない場合は、結果を説明する Optional を返します。 |
10 |
static 指定された現在の null 以外の値を持つ Optional を返します。 |
11 |
static 指定された値を記述する Optional を返します。null でない場合は、空の Optional を返します。 |
12 | T orElse(T その他) 存在する場合は値を返し、そうでない場合はその他を返します。 |
13 | T orElseGet(Supplier extends T> other) 存在する場合は値を返し、そうでない場合は other を呼び出し、その呼び出しの結果を返します。 |
14 |
含まれている値が存在する場合はそれを返します。それ以外の場合は、提供されたサプライヤーによって作成される例外をスローします。 |
15 | 文字列 toString() デバッグに適した、この Optional の空でない文字列表現を返します。 |
このクラスは、次のクラスからメソッドを継承します −
- java.lang.Object
オプションの例
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport java.util.Optional; public class Java8Tester { public static void main(String args[]) { Java8Tester java8Tester = new Java8Tester(); Integer value1 = null; Integer value2 = new Integer(10); //Optional.ofNullable - allows passed parameter to be null. Optional<Integer> a = Optional.ofNullable(value1); //Optional.of - throws NullPointerException if passed parameter is null Optional<Integer> b = Optional.of(value2); System.out.println(java8Tester.sum(a,b)); } public Integer sum(Optional<Integer> a, Optional<Integer> b) { //Optional.isPresent - checks the value is present or not System.out.println("First parameter is present: " + a.isPresent()); System.out.println("Second parameter is present: " + b.isPresent()); //Optional.orElse - returns the value if present otherwise returns //the default value passed. Integer value1 = a.orElse(new Integer(0)); //Optional.get - gets the value, value should be present Integer value2 = b.get(); return value1 + value2; } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
First parameter is present: false Second parameter is present: true 10
Java 8 - Nashorn JavaScript
Java 8 の Nashorn では、大幅に改善された JavaScript エンジンが導入され、既存の Rhino が置き換えられます。 Nashorn は、メモリ内のコードを直接コンパイルし、バイトコードを JVM に渡すため、パフォーマンスが 2 倍から 10 倍向上します。 Nashorn は、パフォーマンスを向上させるために Java 7 で導入された動的機能の呼び出しを使用します。
jjs
Nashorn エンジン用に、JAVA 8 で新しいコマンド ライン ツール jjs が導入されました。 コンソールで JavaScript コードを実行します。
js ファイルの解釈
ファイル sample.js を作成して保存します c:\> JAVA フォルダー内。
sample.js
print('Hello World!');
コンソールを開き、次のコマンドを使用します。
C:\JAVA>jjs sample.js
次の出力が生成されます:
Hello World!
インタラクティブ モードの jjs
コンソールを開き、次のコマンドを使用します。
C:\JAVA>jjs jjs> print("Hello, World!") Hello, World! jjs> quit() >>
引数を渡す
コンソールを開き、次のコマンドを使用します。
C:\JAVA> jjs -- a b c jjs> print('letters: ' +arguments.join(", ")) letters: a, b, c jjs>
Java から JavaScript を呼び出す
ScriptEngineManager を使用すると、Java で JavaScript コードを呼び出して解釈できます。
例
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport javax.script.ScriptEngineManager; import javax.script.ScriptEngine; import javax.script.ScriptException; public class Java8Tester { public static void main(String args[]) { ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn"); String name = "Mahesh"; Integer result = null; try { nashorn.eval("print('" + name + "')"); result = (Integer) nashorn.eval("10 + 2"); } catch(ScriptException e) { System.out.println("Error executing script: "+ e.getMessage()); } System.out.println(result.toString()); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の結果が生成されるはずです-
Mahesh 12
JavaScript から Java を呼び出す
次の例は、java スクリプトで Java クラスをインポートして使用する方法を説明しています。
sample.js を作成して保存します c:\> JAVA フォルダー内。
sample.js
var BigDecimal = Java.type('java.math.BigDecimal'); function calculate(amount, percentage) { var result = new BigDecimal(amount).multiply(new BigDecimal(percentage)).divide( new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_EVEN); return result.toPlainString(); } var result = calculate(568000000000000000023,13.9); print(result);
コンソールを開き、次のコマンドを使用します。
C:\JAVA>jjs sample.js
次の出力が生成されるはずです −
78952000000000000003.20
Java 8 - 新しい日付/時刻 API
Java 8 では、古い日時 API の次の欠点をカバーするために、新しい日時 API が導入されています。
- <リ>
スレッドセーフではない − java.util.Date はスレッド セーフではないため、開発者は date を使用する際に同時実行の問題に対処する必要があります。新しい日時 API は不変であり、setter メソッドはありません。
<リ>デザインが悪い − デフォルトの日付は 1900 年から、月は 1 から、日は 0 から始まるため、統一性はありません。古い API には、日付操作のための直接的なメソッドがあまりありませんでした。新しい API は、そのような操作のための多数のユーティリティ メソッドを提供します。
<リ>タイムゾーンの扱いが難しい − タイムゾーンの問題に対処するために、開発者は多くのコードを書かなければなりませんでした。新しい API は、ドメイン固有の設計を念頭に置いて開発されました。
Java 8 では、パッケージ java.time の下に新しい日時 API が導入されています。以下は、java.time パッケージで導入された重要なクラスの一部です。
- <リ>
ローカル − タイムゾーン処理の複雑さのない単純化された日時 API。
<リ>ゾーン − さまざまなタイムゾーンに対応する特殊な日時 API。
ローカル日時 API
LocalDate/LocalTime および LocalDateTime クラスは、タイムゾーンが不要な開発を簡素化します。それらを実際に見てみましょう。
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport java.time.LocalDate; import java.time.LocalTime; import java.time.LocalDateTime; import java.time.Month; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testLocalDateTime(); } public void testLocalDateTime() { // Get the current date and time LocalDateTime currentTime = LocalDateTime.now(); System.out.println("Current DateTime: " + currentTime); LocalDate date1 = currentTime.toLocalDate(); System.out.println("date1: " + date1); Month month = currentTime.getMonth(); int day = currentTime.getDayOfMonth(); int seconds = currentTime.getSecond(); System.out.println("Month: " + month +"day: " + day +"seconds: " + seconds); LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012); System.out.println("date2: " + date2); //12 december 2014 LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12); System.out.println("date3: " + date3); //22 hour 15 minutes LocalTime date4 = LocalTime.of(22, 15); System.out.println("date4: " + date4); //parse a string LocalTime date5 = LocalTime.parse("20:15:30"); System.out.println("date5: " + date5); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
Current DateTime: 2014-12-09T11:00:45.457 date1: 2014-12-09 Month: DECEMBERday: 9seconds: 45 date2: 2012-12-10T11:00:45.457 date3: 2014-12-12 date4: 22:15 date5: 20:15:30
ゾーン日時 API
タイムゾーンが考慮される場合は、ゾーン化された日時 API が使用されます。それらの動作を見てみましょう。
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport java.time.ZonedDateTime; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testZonedDateTime(); } public void testZonedDateTime() { // Get the current date and time ZonedDateTime date1 = ZonedDateTime.parse("2007-12-03T10:15:30+05:30[Asia/Karachi]"); System.out.println("date1: " + date1); ZoneId id = ZoneId.of("Europe/Paris"); System.out.println("ZoneId: " + id); ZoneId currentZone = ZoneId.systemDefault(); System.out.println("CurrentZone: " + currentZone); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
date1: 2007-12-03T10:15:30+05:00[Asia/Karachi] ZoneId: Europe/Paris CurrentZone: Etc/UTC
Chrono Units Enum
java.time.temporal.ChronoUnit enum が Java 8 に追加され、古い API で日、月などを表すために使用されていた整数値が置き換えられました。実際の動作を見てみましょう。
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport java.time.LocalDate; import java.time.temporal.ChronoUnit; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testChromoUnits(); } public void testChromoUnits() { //Get the current date LocalDate today = LocalDate.now(); System.out.println("Current date: " + today); //add 1 week to the current date LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS); System.out.println("Next week: " + nextWeek); //add 1 month to the current date LocalDate nextMonth = today.plus(1, ChronoUnit.MONTHS); System.out.println("Next month: " + nextMonth); //add 1 year to the current date LocalDate nextYear = today.plus(1, ChronoUnit.YEARS); System.out.println("Next year: " + nextYear); //add 10 years to the current date LocalDate nextDecade = today.plus(1, ChronoUnit.DECADES); System.out.println("Date after ten year: " + nextDecade); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の結果が生成されるはずです-
Current date: 2014-12-10 Next week: 2014-12-17 Next month: 2015-01-10 Next year: 2015-12-10 Date after ten year: 2024-12-10
期間と期間
Java 8 では、時差に対処するために 2 つの特殊なクラスが導入されています。
- <リ>
期間 − 日付ベースの時間を扱います。
<リ>期間 − 時間ベースの時間量を扱います。
それらの動作を見てみましょう。
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport java.time.temporal.ChronoUnit; import java.time.LocalDate; import java.time.LocalTime; import java.time.Duration; import java.time.Period; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testPeriod(); java8tester.testDuration(); } public void testPeriod() { //Get the current date LocalDate date1 = LocalDate.now(); System.out.println("Current date: " + date1); //add 1 month to the current date LocalDate date2 = date1.plus(1, ChronoUnit.MONTHS); System.out.println("Next month: " + date2); Period period = Period.between(date2, date1); System.out.println("Period: " + period); } public void testDuration() { LocalTime time1 = LocalTime.now(); Duration twoHours = Duration.ofHours(2); LocalTime time2 = time1.plus(twoHours); Duration duration = Duration.between(time1, time2); System.out.println("Duration: " + duration); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
Current date: 2014-12-10 Next month: 2015-01-10 Period: P-1M Duration: PT2H
時間調整者
TemporalAdjuster は、日付計算を実行するために使用されます。たとえば、「月の第 2 土曜日」または「次の火曜日」を取得します。それらの動作を見てみましょう。
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport java.time.LocalDate; import java.time.temporal.TemporalAdjusters; import java.time.DayOfWeek; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testAdjusters(); } public void testAdjusters() { //Get the current date LocalDate date1 = LocalDate.now(); System.out.println("Current date: " + date1); //get the next tuesday LocalDate nextTuesday = date1.with(TemporalAdjusters.next(DayOfWeek.TUESDAY)); System.out.println("Next Tuesday on : " + nextTuesday); //get the second saturday of next month LocalDate firstInYear = LocalDate.of(date1.getYear(),date1.getMonth(), 1); LocalDate secondSaturday = firstInYear.with(TemporalAdjusters.nextOrSame( DayOfWeek.SATURDAY)).with(TemporalAdjusters.next(DayOfWeek.SATURDAY)); System.out.println("Second Saturday on : " + secondSaturday); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の結果が生成されるはずです-
Current date: 2014-12-10 Next Tuesday on : 2014-12-16 Second Saturday on : 2014-12-13
後方互換性
toInstant() メソッドが元の Date および Calendar オブジェクトに追加され、それらを新しい Date-Time API に変換するために使用できます。 ofInstant(Insant,ZoneId) メソッドを使用して、LocalDateTime または ZonedDateTime オブジェクトを取得します。それらの動作を見てみましょう。
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモimport java.time.LocalDateTime; import java.time.ZonedDateTime; import java.util.Date; import java.time.Instant; import java.time.ZoneId; public class Java8Tester { public static void main(String args[]) { Java8Tester java8tester = new Java8Tester(); java8tester.testBackwardCompatability(); } public void testBackwardCompatability() { //Get the current date Date currentDate = new Date(); System.out.println("Current date: " + currentDate); //Get the instant of current date in terms of milliseconds Instant now = currentDate.toInstant(); ZoneId currentZone = ZoneId.systemDefault(); LocalDateTime localDateTime = LocalDateTime.ofInstant(now, currentZone); System.out.println("Local date: " + localDateTime); ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(now, currentZone); System.out.println("Zoned date: " + zonedDateTime); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
Current date: Wed Dec 10 05:44:06 UTC 2014 Local date: 2014-12-10T05:44:06.635 Zoned date: 2014-12-10T05:44:06.635Z[Etc/UTC]
Java 8 - Base64
Java 8 では、Base64 がついにその期限を迎えました。 Java 8 には、Base64 エンコーディング用のエンコーダとデコーダが組み込まれています。 Java 8 では、3 種類の Base64 エンコーディングを使用できます。
- <リ>
シンプル − 出力は、A-Za-z0-9+/ にある一連の文字にマップされます。エンコーダーは出力に改行を追加せず、デコーダーは A-Za-z0-9+/ 以外の文字を拒否します。
<リ>URL − 出力は、A-Za-z0-9+_ にある一連の文字にマップされます。出力は URL およびファイル名に対して安全です。
<リ>MIME − 出力は MIME に適した形式にマッピングされます。出力は、それぞれ 76 文字以下の行で表され、改行 '\r' とそれに続く改行 '\n' を行区切りとして使用します。エンコードされた出力の末尾に行区切りはありません。
ネストされたクラス
Sr.No. | ネストされたクラスと説明 |
---|---|
1 | 静的クラス Base64.Decoder このクラスは、RFC 4648 および RFC 2045 で指定されているように、Base64 エンコーディング スキームを使用してバイト データをデコードするためのデコーダを実装します。 |
2 | 静的クラス Base64.Encoder このクラスは、RFC 4648 および RFC 2045 で指定されているように、Base64 エンコード スキームを使用してバイト データをエンコードするためのエンコーダーを実装します。 |
方法
Sr.No. | メソッド名と説明 |
---|---|
1 | 静的 Base64.Decoder getDecoder() Basic タイプの base64 エンコーディング スキームを使用してデコードする Base64.Decoder を返します。 |
2 | 静的 Base64.Encoder getEncoder() Basic タイプの base64 エンコーディング スキームを使用してエンコードする Base64.Encoder を返します。 |
3 | 静的 Base64.Decoder getMimeDecoder() MIME タイプの base64 デコード スキームを使用してデコードする Base64.Decoder を返します。 |
4 | 静的 Base64.Encoder getMimeEncoder() MIME タイプの base64 エンコーディング スキームを使用してエンコードする Base64.Encoder を返します。 |
5 | 静的 Base64.Encoder getMimeEncoder(int lineLength, byte[] lineSeparator) 指定された行の長さと行区切りで MIME タイプの base64 エンコーディング スキームを使用してエンコードする Base64.Encoder を返します。 |
6 | 静的 Base64.Decoder getUrlDecoder() URL およびファイル名セーフ タイプの base64 エンコーディング スキームを使用してデコードする Base64.Decoder を返します。 |
7 | 静的 Base64.Encoder getUrlEncoder() URL およびファイル名セーフ タイプの base64 エンコーディング スキームを使用してエンコードする Base64.Encoder を返します。 |
継承されるメソッド
このクラスは、次のクラスからメソッドを継承します −
- java.lang.Object
Base64 の例
たとえば、C:/> JAVA などの任意のエディターを使用して、次の Java プログラムを作成します。
Java8Tester.java
ライブデモimport java.util.Base64; import java.util.UUID; import java.io.UnsupportedEncodingException; public class HelloWorld { public static void main(String args[]) { try { // Encode using basic encoder String base64encodedString = Base64.getEncoder().encodeToString( "TutorialsPoint?java8".getBytes("utf-8")); System.out.println("Base64 Encoded String (Basic) :" + base64encodedString); // Decode byte[] base64decodedBytes = Base64.getDecoder().decode(base64encodedString); System.out.println("Original String: " + new String(base64decodedBytes, "utf-8")); base64encodedString = Base64.getUrlEncoder().encodeToString( "TutorialsPoint?java8".getBytes("utf-8")); System.out.println("Base64 Encoded String (URL) :" + base64encodedString); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < 10; ++i) { stringBuilder.append(UUID.randomUUID().toString()); } byte[] mimeBytes = stringBuilder.toString().getBytes("utf-8"); String mimeEncodedString = Base64.getMimeEncoder().encodeToString(mimeBytes); System.out.println("Base64 Encoded String (MIME) :" + mimeEncodedString); } catch(UnsupportedEncodingException e) { System.out.println("Error :" + e.getMessage()); } } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
Base64 Encoded String (Basic) :VHV0b3JpYWxzUG9pbnQ/amF2YTg= Original String: TutorialsPoint?java8 Base64 Encoded String (URL) :VHV0b3JpYWxzUG9pbnQ_amF2YTg= Base64 Encoded String (MIME) :YmU3NWY2ODktNGM5YS00ODlmLWI2MTUtZTVkOTk2YzQ1Njk1Y2EwZTg2OTEtMmRiZC00YTQ1LWJl NTctMTI1MWUwMTk0ZWQyNDE0NDAwYjgtYTYxOS00NDY5LTllYTctNjc1YzE3YWJhZTk1MTQ2MDQz NDItOTAyOC00ZWI0LThlOTYtZWU5YzcwNWQyYzVhMTQxMWRjYTMtY2MwNi00MzU0LTg0MTgtNGQ1 MDkwYjdiMzg2ZTY0OWU5MmUtZmNkYS00YWEwLTg0MjQtYThiOTQxNDQ2YzhhNTVhYWExZjItNjU2 Mi00YmM4LTk2ZGYtMDE4YmY5ZDZhMjkwMzM3MWUzNDMtMmQ3MS00MDczLWI0Y2UtMTQxODE0MGU5 YjdmYTVlODUxYzItN2NmOS00N2UyLWIyODQtMThlMWVkYTY4M2Q1YjE3YTMyYmItZjllMS00MTFk LWJiM2UtM2JhYzUxYzI5OWI4
Java