グアバ-クイックガイド
グアバとは何ですか?
GuavaはオープンソースのJavaベースのライブラリであり、多くのプロジェクトで使用されているGoogleのコアライブラリが多数含まれています。コーディングのベストプラクティスを促進し、コーディングエラーを減らすのに役立ちます。これは、コレクション、キャッシング、プリミティブサポート、並行性、共通アノテーション、文字列処理、I / O、および検証のためのユーティリティメソッドを提供します。
グアバの利点
Standardized −GuavaライブラリはGoogleによって管理されています。
Efficient −これは、Java標準ライブラリの信頼性が高く、高速で、効率的な拡張機能です。
Optimized −ライブラリは高度に最適化されています。
Functional Programming −Javaに機能的な処理機能を追加します。
Utilities −プログラミングアプリケーション開発で定期的に必要とされる多くのユーティリティクラスを提供します。
Validation −標準のフェイルセーフ検証メカニズムを提供します。
Best Practices −ベストプラクティスに重点を置いています。
次のコードスニペットについて考えてみます。
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer a = null;
Integer b = new Integer(10);
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Integer a, Integer b) {
return a + b;
}
}
プログラムを実行すると、次の結果が得られます。
Exception in thread "main" java.lang.NullPointerException
at GuavaTester.sum(GuavaTester.java:13)
at GuavaTester.main(GuavaTester.java:9)
以下は、コードの問題です。
sum()は、nullとして渡されるパラメーターを処理していません。
呼び出し元の関数も、誤ってsum()メソッドにnullを渡すことを心配していません。
プログラムを実行すると、NullPointerExceptionが発生します。
上記の問題を回避するために、そのような問題が存在するすべての場所でヌルチェックを行う必要があります。
標準化された方法で上記の問題を解決するために、Guavaが提供するUtilityクラスであるOptionalの使用を見てみましょう。
import com.google.common.base.Optional;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer invalidInput = null;
Optional<Integer> a = Optional.of(invalidInput);
Optional<Integer> b = Optional.of(new Integer(10));
System.out.println(guavaTester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b) {
return a.get() + b.get();
}
}
プログラムを実行すると、次の結果が得られます。
Exception in thread "main" java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:210)
at com.google.common.base.Optional.of(Optional.java:85)
at GuavaTester.main(GuavaTester.java:8)
上記のプログラムの重要な概念を理解しましょう。
Optional −コードにnullを適切に使用させるためのユーティリティクラス。
Optional.of−パラメータとして使用するOptionalクラスのインスタンスを返します。'null'ではなく、渡された値をチェックします。
Optional.get −Optionalクラスに格納されている入力の値を取得します。
オプションクラスを使用すると、呼び出し元のメソッドが適切なパラメータを渡しているかどうかを確認できます。
ローカル環境のセットアップ
それでもJavaプログラミング言語用の環境をセットアップする場合は、このセクションで、マシンにJavaをダウンロードしてセットアップする方法について説明します。以下の手順で環境を設定してください。
Java SEは、Javaのダウンロードリンクから無料で入手できます。したがって、オペレーティングシステムに基づいたバージョンをダウンロードします。
指示に従ってJavaをダウンロードし、 .exeマシンにJavaをインストールします。マシンにJavaをインストールしたら、正しいインストールディレクトリを指すように環境変数を設定する必要があります-
Windows 2000 / XPのパスの設定
Javaがc:\ Program Files \ java \ jdkディレクトリにインストールされていることを前提としています-
「マイコンピュータ」を右クリックし、「プロパティ」を選択します。
[詳細設定]タブの下にある[環境変数]ボタンをクリックします。
ここで、「Path」変数を変更して、Java実行可能ファイルへのパスも含まれるようにします。たとえば、パスが現在「C:\ WINDOWS \ SYSTEM32」に設定されている場合は、パスを「C:\ WINDOWS \ SYSTEM32; c:\ ProgramFiles \ 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があります。しかし今のところ、あなたは次のいずれかを考えることができます-
Notepad − Windowsマシンでは、メモ帳(このチュートリアルに推奨)、TextPadなどの単純なテキストエディターを使用できます。
Netbeans −オープンソースで無料のJava IDEであり、からダウンロードできます。 https://www.netbeans.org/index.html。
Eclipse −これはEclipseオープンソースコミュニティによって開発されたJava IDEでもあり、からダウンロードできます。 https://www.eclipse.org/。
Guavaアーカイブをダウンロード
guava-18.0.jarから最新バージョンのGuavajarファイルをダウンロードします。このチュートリアルの執筆時点で、guava-18.0.jarをダウンロードし、C:\> Guavaフォルダーにコピーしました。
OS | アーカイブ名 |
---|---|
ウィンドウズ | guava-18.0.jar |
Linux | guava-18.0.jar |
マック | guava-18.0.jar |
グアバ環境を設定する
をセットする Guava_HOMEGuavajarがマシンに保存されているベースディレクトリの場所を指す環境変数。さまざまなオペレーティングシステムのGuavaフォルダーにあるguava-18.0.jarを次のように抽出したと仮定します。
OS | 出力 |
---|---|
ウィンドウズ | 環境変数Guava_HOMEをC:\ Guavaに設定します |
Linux | Guava_HOME = / usr / local / Guavaをエクスポートします |
マック | エクスポートGuava_HOME = / Library / Guava |
CLASSPATH変数を設定する
をセットする CLASSPATHGuavajarの場所を指す環境変数。次のように、さまざまなオペレーティングシステムのGuavaフォルダにguava-18.0.jarを保存したと仮定します。
OS | 出力 |
---|---|
ウィンドウズ | 環境変数CLASSPATHを%CLASSPATH%;%Guava_HOME%\ guava-18.0.jar;。;に設定します。 |
Linux | export CLASSPATH = $ CLASSPATH:$ Guava_HOME /guava-18.0.jar:。 |
マック | export CLASSPATH = $ CLASSPATH:$ Guava_HOME /guava-18.0.jar:。 |
オプションは、null以外のオブジェクトを含むために使用される不変オブジェクトです。オプションのオブジェクトは、値がないnullを表すために使用されます。このクラスには、null値をチェックする代わりに、コードが値を使用可能または使用不可として処理するのを容易にするさまざまなユーティリティメソッドがあります。
クラス宣言
以下はの宣言です com.google.common.base.Optional<T> クラス-
@GwtCompatible(serializable = true)
public abstract class Optional<T>
extends Object
implements Serializable
クラスメソッド
シニア番号 | 方法と説明 |
---|---|
1 | static <T> Optional<T> absent() 参照が含まれていないオプションのインスタンスを返します。 |
2 | abstract Set<T> asSet() 含まれているインスタンスが存在する場合、その要素が含まれているインスタンスのみである不変のシングルトンセットを返します。それ以外の場合は、空の不変セット。 |
3 | abstract boolean equals(Object object) オブジェクトがオプションのインスタンスであり、含まれている参照が互いに等しいか、両方が存在しない場合にtrueを返します。 |
4 | static <T> Optional<T> fromNullable(T nullableReference) nullableReferenceがnull以外の場合、その参照を含むオプションのインスタンスを返します。それ以外の場合はabsent()を返します。 |
5 | abstract T get() 含まれているインスタンスを返します。インスタンスは存在している必要があります。 |
6 | abstract int hashCode() このインスタンスのハッシュコードを返します。 |
7 | abstract boolean isPresent() このホルダーに(null以外の)インスタンスが含まれている場合はtrueを返します。 |
8 | static <T> Optional<T> of(T reference) 指定されたnull以外の参照を含むオプションのインスタンスを返します。 |
9 | abstract Optional<T> or(Optional<? extends T> secondChoice) 値が存在する場合、このオプションを返します。それ以外の場合はsecondChoice。 |
10 | abstract T or(Supplier<? extends T> supplier) 含まれているインスタンスが存在する場合はそれを返します。それ以外の場合はsupplier.get()。 |
11 | abstract T or(T defaultValue) 含まれているインスタンスが存在する場合はそれを返します。それ以外の場合はdefaultValue。 |
12 | abstract T orNull() 含まれているインスタンスが存在する場合はそれを返します。それ以外の場合はnull。 |
13 | static <T> Iterable<T> presentInstances(Iterable<? extends Optional<? extends T>> optionals) absent()の発生をスキップして、指定されたオプションから現在の各インスタンスの値を順番に返します。 |
14 | abstract String toString() このインスタンスの文字列表現を返します。 |
15 | abstract <V> Optional<V> transform(Function<? super T,V> function) インスタンスが存在する場合、指定された関数で変換されます。それ以外の場合は、absent()が返されます。 |
継承されたメソッド
このクラスは、次のクラスからメソッドを継承します-
- java.lang.Object
オプションクラスの例
たとえば、任意のエディタを使用して次のJavaプログラムを作成します。 C:/> Guava.
GuavaTester.java
import com.google.common.base.Optional;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
Integer value1 = null;
Integer value2 = new Integer(10);
//Optional.fromNullable - allows passed parameter to be null.
Optional<Integer> a = Optional.fromNullable(value1);
//Optional.of - throws NullPointerException if passed parameter is null
Optional<Integer> b = Optional.of(value2);
System.out.println(guavaTester.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.or - returns the value if present otherwise returns
//the default value passed.
Integer value1 = a.or(new Integer(0));
//Optional.get - gets the value, value should be present
Integer value2 = b.get();
return value1 + value2;
}
}
結果を確認する
を使用してクラスをコンパイルします javac 次のようにコンパイラ-
C:\Guava>javac GuavaTester.java
次に、GuavaTesterを実行して結果を確認します。
C:\Guava>java GuavaTester
結果を見てください。
First parameter is present: false
Second parameter is present: true
10
前提条件は、メソッドまたはコンストラクターが適切なパラメーターで呼び出されているかどうかを確認するための静的メソッドを提供します。前提条件をチェックします。そのメソッドは、失敗するとIllegalArgumentExceptionをスローします。
クラス宣言
以下はの宣言です com.google.common.base.Preconditions クラス-
@GwtCompatible
public final class Preconditions
extends Object
クラスメソッド
シニア番号 | 方法と説明 |
---|---|
1 | static void checkArgument(boolean expression) 呼び出し元のメソッドに1つ以上のパラメーターが含まれる式の真偽を保証します。 |
2 | static void checkArgument(boolean expression, Object errorMessage) 呼び出し元のメソッドに1つ以上のパラメーターが含まれる式の真偽を保証します。 |
3 | static void checkArgument(boolean expression, String errorMessageTemplate, Object. errorMessageArgs) 呼び出し元のメソッドに1つ以上のパラメーターが含まれる式の真偽を保証します。 |
4 | static int checkElementIndex(int index, int size) インデックスが配列、リスト、またはサイズの文字列内の有効な要素を指定していることを確認します。 |
5 | static int checkElementIndex(int index, int size, String desc) インデックスが配列、リスト、またはサイズの文字列内の有効な要素を指定していることを確認します。 |
6 | static <T> T checkNotNull(T reference) 呼び出し元のメソッドにパラメーターとして渡されるオブジェクト参照がnullでないことを確認します。 |
7 | static <T> T checkNotNull(T reference, Object errorMessage) 呼び出し元のメソッドにパラメーターとして渡されるオブジェクト参照がnullでないことを確認します。 |
8 | static <T> T checkNotNull(T reference, String errorMessageTemplate, Object... errorMessageArgs) 呼び出し元のメソッドにパラメーターとして渡されるオブジェクト参照がnullでないことを確認します。 |
9 | static int checkPositionIndex(int index, int size) インデックスが配列、リスト、またはサイズの文字列内の有効な位置を指定していることを確認します。 |
10 | static int checkPositionIndex(int index, int size, String desc) インデックスが配列、リスト、またはサイズの文字列内の有効な位置を指定していることを確認します。 |
11 | static void checkPositionIndexes(int start, int end, int size) startとendが配列、リスト、またはサイズの文字列内の有効な位置を指定し、順番に並んでいることを確認します。 |
12 | static void checkState(boolean expression) 呼び出し元のインスタンスの状態を含むが、呼び出し元のメソッドへのパラメーターを含まない式の真偽を保証します。 |
13 | static void checkState(boolean expression, Object errorMessage) 呼び出し元のインスタンスの状態を含むが、呼び出し元のメソッドへのパラメーターを含まない式の真偽を保証します。 |
14 | static void checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) 呼び出し元のインスタンスの状態を含むが、呼び出し元のメソッドへのパラメーターを含まない式の真偽を保証します。 |
継承されたメソッド
このクラスは、次のクラスからメソッドを継承します-
- java.lang.Object
前提条件クラスの例
たとえば、任意のエディタを使用して次のJavaプログラムを作成します。 C:/> Guava.
GuavaTester.java
import com.google.common.base.Preconditions;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester guavaTester = new GuavaTester();
try {
System.out.println(guavaTester.sqrt(-3.0));
} catch(IllegalArgumentException e) {
System.out.println(e.getMessage());
}
try {
System.out.println(guavaTester.sum(null,3));
} catch(NullPointerException e) {
System.out.println(e.getMessage());
}
try {
System.out.println(guavaTester.getValue(6));
} catch(IndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}
}
public double sqrt(double input) throws IllegalArgumentException {
Preconditions.checkArgument(input > 0.0,
"Illegal Argument passed: Negative value %s.", input);
return Math.sqrt(input);
}
public int sum(Integer a, Integer b) {
a = Preconditions.checkNotNull(a, "Illegal Argument passed: First parameter is Null.");
b = Preconditions.checkNotNull(b, "Illegal Argument passed: Second parameter is Null.");
return a+b;
}
public int getValue(int input) {
int[] data = {1,2,3,4,5};
Preconditions.checkElementIndex(input,data.length, "Illegal Argument passed: Invalid index.");
return 0;
}
}
結果を確認する
を使用してクラスをコンパイルします javac 次のようにコンパイラ-
C:\Guava>javac GuavaTester.java
次に、GuavaTesterを実行して結果を確認します。
C:\Guava>java GuavaTester
結果を見てください。
Illegal Argument passed: Negative value -3.0.
Illegal Argument passed: First parameter is Null.
Illegal Argument passed: Invalid index. (6) must be less than size (5)
順序付けは、強化されたチェーン機能、複数のユーティリティメソッド、マルチタイプの並べ替え機能などを備えた強化されたコンパレータと見なすことができます。
クラス宣言
以下はの宣言です com.google.common.collect.Ordering<T> クラス-
@GwtCompatible
public abstract class Ordering<T>
extends Object
implements Comparator<T>
クラスメソッド
シニア番号 | 方法と説明 |
---|---|
1 | static Ordering<Object> allEqual() すべての値を等しいものとして扱い、「順序付けなし」を示す順序付けを返します。この順序を安定した並べ替えアルゴリズムに渡すと、要素の順序は変更されません。 |
2 | static Ordering<Object> arbitrary() すべてのオブジェクトに対して任意の順序を返します。compare(a、b)== 0は、a == b(恒等式)を意味します。 |
3 | int binarySearch(List<? extends T> sortedList, T key) バイナリ検索アルゴリズムを使用して、sortedListでキーを検索します。 |
4 | abstract int compare(T left, T right) 順序について2つの引数を比較します。 |
5 | <U extends T> Ordering<U> compound(Comparator<? super U> secondaryComparator) 最初にthisの順序を使用するが、「同点」の場合は、secondaryComparatorに委任する順序を返します。 |
6 | static <T> Ordering<T> compound(Iterable<? extends Comparator<? super T>> comparators) ゼロ以外の結果が見つかるまで、指定された各コンパレータを順番に試行し、その結果を返し、すべてのコンパレータがゼロを返した場合にのみゼロを返す順序を返します。 |
7 | static <T> Ordering<T> explicit(List<T> valuesInOrder) 指定されたリストに表示される順序に従ってオブジェクトを比較する順序を返します。 |
8 | static <T> Ordering<T> explicit(T leastValue, T... remainingValuesInOrder) このメソッドに与えられた順序に従ってオブジェクトを比較する順序を返します。 |
9 | static <T> Ordering<T> from(Comparator<T> comparator) 既存のコンパレータインスタンスに基づいた順序を返します。 |
10 | <E extends T> List<E> greatestOf(Iterable<E> iterable, int k) この順序に従って、指定されたiterableのk個の最大要素を最大から最小の順に返します。 |
11 | <E extends T> List<E> greatestOf(Iterator<E> iterator, int k) この順序に従って、指定されたイテレータからk個の最大要素を最大から最小の順に返します。 |
12 | <E extends T> ImmutableList<E> immutableSortedCopy(Iterable<E> elements) この順序でソートされた要素を含む不変のリストを返します。 |
13 | boolean isOrdered(Iterable<? extends T> iterable) この順序に従って、最初の要素の後のiterableの各要素が、その前の要素以上である場合にtrueを返します。 |
14 | boolean isStrictlyOrdered(Iterable<? extends T> iterable) この順序に従って、最初の要素の後のiterableの各要素が、その前の要素よりも厳密に大きい場合にtrueを返します。 |
15 | <E extends T> List<E> leastOf(Iterable<E> iterable, int k) この順序に従って、指定されたiterableのk個の最小要素を最小から最大の順に返します。 |
16 | <E extends T> List<E> leastOf(Iterator<E> elements, int k) この順序に従って、指定されたイテレータからk個の最小要素を最小から最大の順に返します。 |
17 | <S extends T> Ordering<Iterable<S>> lexicographical() ゼロ以外の結果が見つかるまで、対応する要素をペアごとに比較することにより、反復可能オブジェクトをソートする新しい順序を返します。「辞書の順序」を課します。 |
18 | <E extends T> E max(E a, E b) この順序に従って、2つの値の大きい方を返します。 |
19 | <E extends T> E max(E a, E b, E c, E... rest) この順序に従って、指定された値の最大値を返します。 |
20 | <E extends T> E max(Iterable<E> iterable) この順序に従って、指定された値の最大値を返します。 |
21 | <E extends T> E max(Iterator<E> iterator) この順序に従って、指定された値の最大値を返します。 |
22 | <E extends T> E min(E a, E b) この順序に従って、2つの値のうち小さい方を返します。 |
23 | <E extends T> E min(E a, E b, E c, E... rest) この順序に従って、指定された値の最小値を返します。 |
24 | <E extends T> E min(Iterable<E> iterable) この順序に従って、指定された値の最小値を返します。 |
25 | <E extends T> E min(Iterator<E> iterator) この順序に従って、指定された値の最小値を返します。 |
26 | static <C extends Comparable> Ordering<C> natural() 値の自然な順序を使用するシリアル化可能な順序を返します。 |
27 | <S extends T> Ordering<S> nullsFirst() nullを他のすべての値よりも小さいものとして扱い、これを使用してnull以外の値を比較する順序を返します。 |
28 | <S extends T> Ordering<S> nullsLast() nullを他のすべての値よりも大きいものとして扱い、この順序を使用してnull以外の値を比較する順序を返します。 |
29 | <F> Ordering<F> onResultOf(Function<F,? extends T> function) 最初に関数を要素に適用し、次にこれを使用してそれらの結果を比較することにより、要素を順序付けるFの新しい順序を返します。 |
30 | <S extends T> Ordering<S> reverse() この順序の逆を返します。Collections.reverseOrder(Comparator)と同等の順序。 |
31 | <E extends T> List<E> sortedCopy(Iterable<E> elements) この順序でソートされた要素を含む可変リストを返します。これは、結果のリストをさらに変更する必要がある場合、またはnullが含まれている可能性がある場合にのみ使用してください。 |
32 | static Ordering<Object> usingToString() toString()によって返される文字列表現の自然順序によってオブジェクトを比較する順序を返します。 |
継承されたメソッド
このクラスは、次のクラスからメソッドを継承します-
- java.lang.Object
注文クラスの例
たとえば、任意のエディタを使用して次のJavaプログラムを作成します。 C:/> Guava.
GuavaTester.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.Ordering;
public class GuavaTester {
public static void main(String args[]) {
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(new Integer(5));
numbers.add(new Integer(2));
numbers.add(new Integer(15));
numbers.add(new Integer(51));
numbers.add(new Integer(53));
numbers.add(new Integer(35));
numbers.add(new Integer(45));
numbers.add(new Integer(32));
numbers.add(new Integer(43));
numbers.add(new Integer(16));
Ordering ordering = Ordering.natural();
System.out.println("Input List: ");
System.out.println(numbers);
Collections.sort(numbers,ordering );
System.out.println("Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
System.out.println("List is sorted: " + ordering.isOrdered(numbers));
System.out.println("Minimum: " + ordering.min(numbers));
System.out.println("Maximum: " + ordering.max(numbers));
Collections.sort(numbers,ordering.reverse());
System.out.println("Reverse: " + numbers);
numbers.add(null);
System.out.println("Null added to Sorted List: ");
System.out.println(numbers);
Collections.sort(numbers,ordering.nullsFirst());
System.out.println("Null first Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
List<String> names = new ArrayList<String>();
names.add("Ram");
names.add("Shyam");
names.add("Mohan");
names.add("Sohan");
names.add("Ramesh");
names.add("Suresh");
names.add("Naresh");
names.add("Mahesh");
names.add(null);
names.add("Vikas");
names.add("Deepak");
System.out.println("Another List: ");
System.out.println(names);
Collections.sort(names,ordering.nullsFirst().reverse());
System.out.println("Null first then reverse sorted list: ");
System.out.println(names);
}
}
結果を確認する
を使用してクラスをコンパイルします javac 次のようにコンパイラ-
C:\Guava>javac GuavaTester.java
次に、GuavaTesterを実行して結果を確認します。
C:\Guava>java GuavaTester
結果を見てください。
Input List:
[5, 2, 15, 51, 53, 35, 45, 32, 43, 16]
Sorted List:
[2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
List is sorted: true
Minimum: 2
Maximum: 53
Reverse: [53, 51, 45, 43, 35, 32, 16, 15, 5, 2]
Null added to Sorted List:
[53, 51, 45, 43, 35, 32, 16, 15, 5, 2, null]
Null first Sorted List:
[null, 2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
Another List:
[Ram, Shyam, Mohan, Sohan, Ramesh, Suresh, Naresh, Mahesh, null, Vikas, Deepak]
Null first then reverse sorted list:
[Vikas, Suresh, Sohan, Shyam, Ramesh, Ram, Naresh, Mohan, Mahesh, Deepak, null]
Objectsクラスは、equals、hashCodeなどのすべてのオブジェクトに適用可能なヘルパー関数を提供します。
クラス宣言
以下はの宣言です com.google.common.base.Objects クラス-
@GwtCompatible
public final class Objects
extends Object
クラスメソッド
シニア番号 | 方法と説明 |
---|---|
1 | static boolean equal(Object a, Object b) 2つのnullの可能性のあるオブジェクトが等しいかどうかを判別します。 |
2 | static <T> T firstNonNull(T first, T second) 非推奨。代わりにMoreObjects.firstNonNull(T、T)を使用してください。この方法は2016年6月に削除される予定です。 |
3 | static int hashCode(Object... objects) 複数の値のハッシュコードを生成します。 |
4 | static Objects.ToStringHelper toStringHelper(Class<?> clazz) 非推奨。代わりにMoreObjects.toStringHelper(Class)を使用してください。このメソッドは2016年6月に削除される予定です |
5 | static Objects.ToStringHelper toStringHelper(Object self) 非推奨。代わりにMoreObjects.toStringHelper(Object)を使用してください。この方法は2016年6月に削除される予定です。 |
6 | static Objects.ToStringHelper toStringHelper(String className) 非推奨。代わりにMoreObjects.toStringHelper(String)を使用してください。この方法は2016年6月に削除される予定です。 |
継承されたメソッド
このクラスは、次のクラスからメソッドを継承します-
- java.lang.Object
オブジェクトクラスの例
たとえば、任意のエディタを使用して次のJavaプログラムを作成します。 C:/> Guava.
GuavaTester.java
import com.google.common.base.Objects;
public class GuavaTester {
public static void main(String args[]) {
Student s1 = new Student("Mahesh", "Parashar", 1, "VI");
Student s2 = new Student("Suresh", null, 3, null);
System.out.println(s1.equals(s2));
System.out.println(s1.hashCode());
System.out.println(
Objects.toStringHelper(s1)
.add("Name",s1.getFirstName()+" " + s1.getLastName())
.add("Class", s1.getClassName())
.add("Roll No", s1.getRollNo())
.toString());
}
}
class Student {
private String firstName;
private String lastName;
private int rollNo;
private String className;
public Student(String firstName, String lastName, int rollNo, String className) {
this.firstName = firstName;
this.lastName = lastName;
this.rollNo = rollNo;
this.className = className;
}
@Override
public boolean equals(Object object) {
if(!(object instanceof Student) || object == null) {
return false;
}
Student student = (Student)object;
// no need to handle null here
// Objects.equal("test", "test") == true
// Objects.equal("test", null) == false
// Objects.equal(null, "test") == false
// Objects.equal(null, null) == true
return Objects.equal(firstName, student.firstName) // first name can be null
&& Objects.equal(lastName, student.lastName) // last name can be null
&& Objects.equal(rollNo, student.rollNo)
&& Objects.equal(className, student.className); // class name can be null
}
@Override
public int hashCode() {
//no need to compute hashCode by self
return Objects.hashCode(className,rollNo);
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
結果を確認する
を使用してクラスをコンパイルします javac 次のようにコンパイラ-
C:\Guava>javac GuavaTester.java
次に、GuavaTesterを実行して結果を確認します。
C:\Guava>java GuavaTester
結果を見てください。
false
85871
Student{Name=Mahesh Parashar, Class=VI, Roll No=1}
範囲は、間隔またはシーケンスを表します。特定の範囲にある数字/文字列のセットを取得するために使用されます。
クラス宣言
以下はの宣言です com.google.common.collect.Range<C> クラス-
@GwtCompatible
public final class Range<C extends Comparable>
extends Object
implements Predicate<C>, Serializable
メソッド
シニア番号 | 方法と説明 |
---|---|
1 | static <C extends Comparable<?>> Range<C> all() タイプCのすべての値を含む範囲を返します。 |
2 | boolean apply(C input)Deprecated. 述語インターフェースを満たすためにのみ提供されます。代わりにcontains(C)を使用してください。 |
3 | static <C extends Comparable<?>> Range<C> atLeast(C endpoint) エンドポイント以上のすべての値を含む範囲を返します。 |
4 | static <C extends Comparable<?>> Range<C> atMost(C endpoint) エンドポイント以下のすべての値を含む範囲を返します。 |
5 | Range<C> canonical(DiscreteDomain<C> domain) 指定されたドメイン内のこの範囲の正規形式を返します。 |
6 | static <C extends Comparable<?>> Range<C> closed(C lower, C upper) 下限以上および上限以下のすべての値を含む範囲を返します。 |
7 | static <C extends Comparable<?>> Range<C> closedOpen(C lower, C upper) 下限以上で厳密に上限未満のすべての値を含む範囲を返します。 |
8 | boolean contains(C value) 値がこの範囲の範囲内にある場合はtrueを返します。 |
9 | boolean containsAll(Iterable<? extends C> values) 値のすべての要素がこの範囲に含まれている場合はtrueを返します。 |
10 | static <C extends Comparable<?>> Range<C> downTo(C endpoint, BoundType boundType) 指定されたエンドポイントからの範囲を返します。これは、包含(クローズ)または排他(オープン)のいずれかであり、上限はありません。 |
11 | static <C extends Comparable<?>> Range<C> encloseAll(Iterable<C> values) 指定されたすべての値を含む最小範囲を返します。 |
12 | boolean encloses(Range<C> other) otherの境界がこの範囲の範囲外に拡張されていない場合、trueを返します。 |
13 | boolean equals(Object object) オブジェクトがこの範囲と同じエンドポイントとバインドされたタイプを持つ範囲である場合、trueを返します。 |
14 | static <C extends Comparable<?>> Range<C> greaterThan(C endpoint) エンドポイントよりも厳密に大きいすべての値を含む範囲を返します。 |
15 | int hashCode() この範囲のハッシュコードを返します。 |
16 | boolean hasLowerBound() この範囲のエンドポイントが低い場合はtrueを返します。 |
17 | boolean hasUpperBound() この範囲に上限がある場合はtrueを返します。 |
18 | Range<C> intersection(Range<C> connectedRange) この範囲が存在する場合は、この範囲とconnectedRangeの両方で囲まれた最大範囲を返します。 |
19 | boolean isConnected(Range<C> other) この範囲と他の範囲の両方で囲まれた(空の可能性がある)範囲が存在する場合はtrueを返します。 |
20 | boolean isEmpty() この範囲が[v..v)または(v..v]の形式の場合、trueを返します。 |
21 | static <C extends Comparable<?>> Range<C> lessThan(C endpoint) エンドポイントより厳密に小さいすべての値を含む範囲を返します。 |
22 | BoundType lowerBoundType() この範囲の下限のタイプを返します。範囲に下限が含まれている場合はBoundType.CLOSED、含まれていない場合はBoundType.OPENです。 |
23 | C lowerEndpoint() この範囲の下限を返します。 |
24 | static <C extends Comparable<?>> Range<C> open(C lower, C upper) 厳密に下限より大きく、厳密に上限より小さいすべての値を含む範囲を返します。 |
25 | static <C extends Comparable<?>> Range<C> openClosed(C lower, C upper) 厳密に下限より大きく、上限以下のすべての値を含む範囲を返します。 |
26 | static <C extends Comparable<?>> Range<C> range(C lower, BoundType lowerType, C upper, BoundType upperType) 下限から上限までの任意の値を含む範囲を返します。各エンドポイントは、包括的(クローズ)または排他的(オープン)のいずれかです。 |
27 | static <C extends Comparable<?>> Range<C> singleton(C value) 指定された値のみを含む範囲を返します。 |
28 | Range<C> span(Range<C> other) この範囲とその他の範囲の両方を囲む最小範囲を返します。 |
29 | String toString() 「[3..5)」など、この範囲の文字列表現を返します(他の例はクラスのドキュメントに記載されています)。 |
30 | BoundType upperBoundType() この範囲の上限のタイプを返します。範囲に上限が含まれている場合はBoundType.CLOSED、含まれていない場合はBoundType.OPENです。 |
31 | C upperEndpoint() この範囲の上限を返します。 |
32 | static <C extends Comparable<?>> Range<C> upTo(C endpoint, BoundType boundType) 指定されたエンドポイントまでの下限のない範囲を返します。これは、包括的(クローズ)または排他的(オープン)のいずれかです。 |
継承されたメソッド
このクラスは、次のクラスからメソッドを継承します-
- java.lang.Object
範囲クラスの例
たとえば、任意のエディタを使用して次のJavaプログラムを作成します。 C:/> Guava.
GuavaTester.java
import com.google.common.collect.ContiguousSet;
import com.google.common.collect.DiscreteDomain;
import com.google.common.collect.Range;
import com.google.common.primitives.Ints;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester tester = new GuavaTester();
tester.testRange();
}
private void testRange() {
//create a range [a,b] = { x | a <= x <= b}
Range<Integer> range1 = Range.closed(0, 9);
System.out.print("[0,9] : ");
printRange(range1);
System.out.println("5 is present: " + range1.contains(5));
System.out.println("(1,2,3) is present: " + range1.containsAll(Ints.asList(1, 2, 3)));
System.out.println("Lower Bound: " + range1.lowerEndpoint());
System.out.println("Upper Bound: " + range1.upperEndpoint());
//create a range (a,b) = { x | a < x < b}
Range<Integer> range2 = Range.open(0, 9);
System.out.print("(0,9) : ");
printRange(range2);
//create a range (a,b] = { x | a < x <= b}
Range<Integer> range3 = Range.openClosed(0, 9);
System.out.print("(0,9] : ");
printRange(range3);
//create a range [a,b) = { x | a <= x < b}
Range<Integer> range4 = Range.closedOpen(0, 9);
System.out.print("[0,9) : ");
printRange(range4);
//create an open ended range (9, infinity
Range<Integer> range5 = Range.greaterThan(9);
System.out.println("(9,infinity) : ");
System.out.println("Lower Bound: " + range5.lowerEndpoint());
System.out.println("Upper Bound present: " + range5.hasUpperBound());
Range<Integer> range6 = Range.closed(3, 5);
printRange(range6);
//check a subrange [3,5] in [0,9]
System.out.println("[0,9] encloses [3,5]:" + range1.encloses(range6));
Range<Integer> range7 = Range.closed(9, 20);
printRange(range7);
//check ranges to be connected
System.out.println("[0,9] is connected [9,20]:" + range1.isConnected(range7));
Range<Integer> range8 = Range.closed(5, 15);
//intersection
printRange(range1.intersection(range8));
//span
printRange(range1.span(range8));
}
private void printRange(Range<Integer> range) {
System.out.print("[ ");
for(int grade : ContiguousSet.create(range, DiscreteDomain.integers())) {
System.out.print(grade +" ");
}
System.out.println("]");
}
}
結果を確認する
を使用してクラスをコンパイルします javac 次のようにコンパイラ-
C:\Guava>javac GuavaTester.java
次に、GuavaTesterを実行して結果を確認します。
C:\Guava>java GuavaTester
結果を見てください。
[0,9] : [ 0 1 2 3 4 5 6 7 8 9 ]
5 is present: true
(1,2,3) is present: true
Lower Bound: 0
Upper Bound: 9
(0,9) : [ 1 2 3 4 5 6 7 8 ]
(0,9] : [ 1 2 3 4 5 6 7 8 9 ]
[0,9) : [ 0 1 2 3 4 5 6 7 8 ]
(9,infinity) :
Lower Bound: 9
Upper Bound present: false
[ 3 4 5 ]
[0,9] encloses [3,5]:true
[ 9 10 11 12 13 14 15 16 17 18 19 20 ]
[0,9] is connected [9,20]:true
[ 5 6 7 8 9 ]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ]
Throwablesクラスは、Throwableインターフェイスに関連するユーティリティメソッドを提供します。
クラス宣言
以下はの宣言です com.google.common.base.Throwables クラス-
public final class Throwables
extends Object
クラスメソッド
シニア番号 | 方法と説明 |
---|---|
1 | static List<Throwable> getCausalChain(Throwable throwable) Throwable原因チェーンをリストとして取得します。 |
2 | static Throwable getRootCause(Throwable throwable) throwableの最も内側の原因を返します。 |
3 | static String getStackTraceAsString(Throwable throwable) toString()の結果を含む文字列を返し、その後にthrowableの完全な再帰的スタックトレースが続きます。 |
4 | static RuntimeException propagate(Throwable throwable) スロー可能なものがRuntimeExceptionまたはErrorのインスタンスである場合はそのまま、または最後の手段として、RuntimeExceptionでラップしてから伝播します。 |
5 | static <X extends Throwable> void propagateIfInstanceOf(Throwable throwable, Class<X> declaredType) それがdeclaredTypeのインスタンスである場合に限り、throwableをそのまま正確に伝播します。 |
6 | static void propagateIfPossible(Throwable throwable) RuntimeExceptionまたはErrorのインスタンスである場合に限り、throwableをそのまま正確に伝播します。 |
7 | static <X extends Throwable> void propagateIfPossible(Throwable throwable, Class<X> declaredType) それがRuntimeException、Error、またはdeclaredTypeのインスタンスである場合に限り、throwableをそのまま正確に伝播します。 |
8 | static <X1 extends Throwable,X2 extends Throwable>void propagateIfPossible(Throwable throwable, Class<X1> declaredType1, Class<X2> declaredType2) RuntimeException、Error、declaredType1、またはdeclaredType2のインスタンスである場合に限り、スロー可能をそのまま伝播します。 |
継承されたメソッド
このクラスは、次のクラスからメソッドを継承します-
- java.lang.Object
Throwablesクラスの例
たとえば、任意のエディタを使用して次のJavaプログラムを作成します。 C:/> Guava.
GuavaTester.java
import java.io.IOException;
import com.google.common.base.Objects;
import com.google.common.base.Throwables;
public class GuavaTester {
public static void main(String args[]) {
GuavaTester tester = new GuavaTester();
try {
tester.showcaseThrowables();
} catch (InvalidInputException e) {
//get the root cause
System.out.println(Throwables.getRootCause(e));
} catch (Exception e) {
//get the stack trace in string format
System.out.println(Throwables.getStackTraceAsString(e));
}
try {
tester.showcaseThrowables1();
} catch (Exception e) {
System.out.println(Throwables.getStackTraceAsString(e));
}
}
public void showcaseThrowables() throws InvalidInputException {
try {
sqrt(-3.0);
} catch (Throwable e) {
//check the type of exception and throw it
Throwables.propagateIfInstanceOf(e, InvalidInputException.class);
Throwables.propagate(e);
}
}
public void showcaseThrowables1() {
try {
int[] data = {1,2,3};
getValue(data, 4);
} catch (Throwable e) {
Throwables.propagateIfInstanceOf(e, IndexOutOfBoundsException.class);
Throwables.propagate(e);
}
}
public double sqrt(double input) throws InvalidInputException {
if(input < 0) throw new InvalidInputException();
return Math.sqrt(input);
}
public double getValue(int[] list, int index) throws IndexOutOfBoundsException {
return list[index];
}
public void dummyIO() throws IOException {
throw new IOException();
}
}
class InvalidInputException extends Exception {
}
結果を確認する
を使用してクラスをコンパイルします javac 次のようにコンパイラ-
C:\Guava>javac GuavaTester.java
次に、GuavaTesterを実行して結果を確認します。
C:\Guava>java GuavaTester
結果を見てください。
InvalidInputException
java.lang.ArrayIndexOutOfBoundsException: 4
at GuavaTester.getValue(GuavaTester.java:52)
at GuavaTester.showcaseThrowables1(GuavaTester.java:38)
at GuavaTester.main(GuavaTester.java:19)
Guavaは、アプリケーション開発作業における開発者の経験に基づいて、多くの高度なコレクションを紹介しています。以下に役立つコレクションのリストを示します-
シニア番号 | コレクションの名前と説明 |
---|---|
1 | マルチセット 重複要素を許可するためのSetインターフェイスの拡張。 |
2 | マルチマップ キーを一度に複数の値にマップできるようにするためのMapインターフェースの拡張。 |
3 | BiMap 逆演算をサポートするためのMapインターフェースの拡張。 |
4 | テーブル 表は、単一の値を参照するために2つのキーを組み合わせて指定できる特別なマップを表しています。 |
Guavaは、LoadingCache <K、V>インターフェイスによって非常に強力なメモリベースのキャッシュメカニズムを提供します。値はキャッシュに自動的にロードされ、キャッシュのニーズに役立つ多くのユーティリティメソッドを提供します。
インターフェイス宣言
以下はの宣言です com.google.common.cache.LoadingCache<K,V> インターフェイス-
@Beta
@GwtCompatible
public interface LoadingCache<K,V>
extends Cache<K,V>, Function<K,V>
インターフェイスメソッド
シニア番号 | 方法と説明 |
---|---|
1 | V apply(K key) 非推奨。関数インターフェースを満たすために提供されます。代わりにget(K)またはgetUnchecked(K)を使用してください。 |
2 | ConcurrentMap<K,V> asMap() このキャッシュに格納されているエントリのビューをスレッドセーフマップとして返します。 |
3 | V get(K key) このキャッシュ内のキーに関連付けられた値を返します。最初に、必要に応じてその値をロードします。 |
4 | ImmutableMap<K,V> getAll(Iterable<? extends K> keys) キーに関連付けられた値のマップを返し、必要に応じてそれらの値を作成または取得します。 |
5 | V getUnchecked(K key) このキャッシュ内のキーに関連付けられた値を返します。最初に、必要に応じてその値をロードします。 |
6 | void refresh(K key) キーの新しい値を、場合によっては非同期でロードします。 |
LoadingCacheの例
たとえば、任意のエディタを使用して次のJavaプログラムを作成します。 C:/> Guava.
GuavaTester.java
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import com.google.common.base.MoreObjects;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
public class GuavaTester {
public static void main(String args[]) {
//create a cache for employees based on their employee id
LoadingCache<String, Employee> employeeCache =
CacheBuilder.newBuilder()
.maximumSize(100) // maximum 100 records can be cached
.expireAfterAccess(30, TimeUnit.MINUTES) // cache will expire after 30 minutes of access
.build(new CacheLoader<String, Employee>() { // build the cacheloader
@Override
public Employee load(String empId) throws Exception {
//make the expensive call
return getFromDatabase(empId);
}
});
try {
//on first invocation, cache will be populated with corresponding
//employee record
System.out.println("Invocation #1");
System.out.println(employeeCache.get("100"));
System.out.println(employeeCache.get("103"));
System.out.println(employeeCache.get("110"));
//second invocation, data will be returned from cache
System.out.println("Invocation #2");
System.out.println(employeeCache.get("100"));
System.out.println(employeeCache.get("103"));
System.out.println(employeeCache.get("110"));
} catch (ExecutionException e) {
e.printStackTrace();
}
}
private static Employee getFromDatabase(String empId) {
Employee e1 = new Employee("Mahesh", "Finance", "100");
Employee e2 = new Employee("Rohan", "IT", "103");
Employee e3 = new Employee("Sohan", "Admin", "110");
Map<String, Employee> database = new HashMap<String, Employee>();
database.put("100", e1);
database.put("103", e2);
database.put("110", e3);
System.out.println("Database hit for" + empId);
return database.get(empId);
}
}
class Employee {
String name;
String dept;
String emplD;
public Employee(String name, String dept, String empID) {
this.name = name;
this.dept = dept;
this.emplD = empID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getEmplD() {
return emplD;
}
public void setEmplD(String emplD) {
this.emplD = emplD;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(Employee.class)
.add("Name", name)
.add("Department", dept)
.add("Emp Id", emplD).toString();
}
}
結果を確認する
を使用してクラスをコンパイルします javac 次のようにコンパイラ-
C:\Guava>javac GuavaTester.java
次に、GuavaTesterを実行して結果を確認します。
C:\Guava>java GuavaTester
結果を見てください。
Invocation #1
Database hit for100
Employee{Name=Mahesh, Department=Finance, Emp Id=100}
Database hit for103
Employee{Name=Rohan, Department=IT, Emp Id=103}
Database hit for110
Employee{Name=Sohan, Department=Admin, Emp Id=110}
Invocation #2
Employee{Name=Mahesh, Department=Finance, Emp Id=100}
Employee{Name=Rohan, Department=IT, Emp Id=103}
Employee{Name=Sohan, Department=Admin, Emp Id=110}
Guavaは、アプリケーション開発作業における開発者の経験に基づいて、多くの高度な文字列ユーティリティを導入しています。以下は、便利な文字列ベースのユーティリティのリストです-
シニア番号 | ユーティリティ名と説明 |
---|---|
1 | ジョイナー オブジェクト、文字列などを結合するユーティリティ。 |
2 | スプリッター 文字列を分割するユーティリティ。 |
3 | CharMatcher 文字操作のためのユーティリティ。 |
4 | CaseFormat 文字列形式を変更するためのユーティリティ。 |
Javaのプリミティブ型を使用してジェネリックスやコレクションを入力として渡すことはできないため、Guavaはプリミティブ型をオブジェクトとして処理するために多くのラッパーユーティリティクラスを提供しました。以下は、有用なプリミティブ処理ユーティリティのリストです-
シニア番号 | ユーティリティ名と説明 |
---|---|
1 | バイト プリミティブバイトのユーティリティ。 |
2 | ショーツ プリミティブショートのユーティリティ。 |
3 | Ints プリミティブintのユーティリティ。 |
4 | ロング プリミティブロングのユーティリティ。 |
5 | フロート プリミティブフロートのユーティリティ。 |
6 | ダブルス プリミティブダブルのユーティリティ。 |
7 | イワナ プリミティブ文字のユーティリティ。 |
8 | ブール値 プリミティブブール値のユーティリティ。 |
Guavaは、int、long、およびBigIntegerを処理するための数学関連のユーティリティクラスを提供します。以下は便利なユーティリティのリストです-
シニア番号 | ユーティリティ名と説明 |
---|---|
1 | IntMath intの数学ユーティリティ。 |
2 | LongMath 長い間数学ユーティリティ。 |
3 | BigIntegerMath BigIntegerの数学ユーティリティ。 |