Guava-quick-guide
グアバ-概要
グアバとは何ですか?
GuavaはオープンソースのJavaベースのライブラリであり、Googleの多くのコアライブラリが含まれており、それらのプロジェクトの多くで使用されています。 コーディングのベストプラクティスを促進し、コーディングエラーの削減に役立ちます。 コレクション、キャッシュ、プリミティブサポート、同時実行性、一般的な注釈、文字列処理、I/O、および検証のためのユーティリティメソッドを提供します。
グアバの利点
- Standardized -GuavaライブラリはGoogleによって管理されています。
- 効率的-Java標準ライブラリの信頼性が高く、高速で効率的な拡張機能です。
- 最適化-ライブラリは高度に最適化されています。
- 関数型プログラミング-Javaに関数型処理機能を追加します。
- ユーティリティ-アプリケーション開発のプログラミングに定期的に必要とされる多くのユーティリティクラスを提供します。
- 検証-標準のフェイルセーフ検証メカニズムを提供します。
- ベストプラクティス-ベストプラクティスを強調しています。
次のコードスニペットを考えてください。
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として渡されるパラメーターを処理しません。
- 呼び出し元の関数は、nullを誤ってsum()メソッドに渡すことも心配していません。
- プログラムを実行すると、NullPointerExceptionが発生します。
上記の問題を回避するために、そのような問題が存在するすべての場所でヌルチェックを行う必要があります。
上記の問題を標準化された方法で解決するために、Guavaが提供するユーティリティクラスである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)
上記のプログラムの重要な概念を理解しましょう。
- オプション-コードがnullを適切に使用するためのユーティリティクラス。
- Optional.of -パラメータとして使用されるOptionalクラスのインスタンスを返します。 「null」ではなく、渡された値をチェックします。
- Optional.get -Optionalクラスに保存されている入力の値を取得します。
Optionalクラスを使用すると、呼び出し元のメソッドが適切なパラメーターを渡しているかどうかを確認できます。
グアバ-環境設定
ローカル環境のセットアップ
Javaプログラミング言語用に環境をセットアップする場合は、このセクションで、マシンにJavaをダウンロードしてセットアップする方法を説明します。 環境をセットアップするには、以下の手順に従ってください。
Java SEは、https://java.sun.com/javase/downloads/index_jdk5.jsp [Javaのダウンロード]リンクから無料で入手できます。 そのため、オペレーティングシステムに基づいてバージョンをダウンロードします。
指示に従ってJavaをダウンロードし、*。exe *を実行して、マシンにJavaをインストールします。 マシンにJavaをインストールしたら、正しいインストールディレクトリを指すように環境変数を設定する必要があります-
Windows 2000/XPのパスのセットアップ
_c:\ Program Files \ java \ jdk_ディレクトリにJavaがインストールされていると想定しています-
- 「マイコンピュータ」を右クリックして、「プロパティ」を選択します。
- 「詳細」タブの下の「環境変数」ボタンをクリックします。
- ここで、「Path」変数を変更して、Java実行可能ファイルへのパスも含まれるようにします。 たとえば、パスが現在「C:\ WINDOWS \ SYSTEM32」に設定されている場合、パスを「C:\ WINDOWS \ SYSTEM32; c:\ Program Files \ java \ jdk \ bin」に変更します。
Windows 95/98/MEのパスのセットアップ
_c:\ Program Files \ java \ jdk_ディレクトリにJavaがインストールされていると想定しています-
- 「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などの単純なテキストエディタを使用できます。
- Netbeans -これは、オープンソースで無料のJava IDEであり、https://www.netbeans.org/indexlからダウンロードできます。
- Eclipse -また、eclipseオープンソースコミュニティによって開発されたJava IDEであり、https://www.eclipse.org/からダウンロードできます。
グアバアーカイブのダウンロード
guava-18.0.jarからGuava jarファイルの最新バージョンをダウンロードします。 このチュートリアルを書いている時点で、_guava-18.0.jar_をダウンロードし、C:\> Guavaフォルダーにコピーしました。
OS | Archive name |
---|---|
Windows | guava-18.0.jar |
Linux | guava-18.0.jar |
Mac | guava-18.0.jar |
グアバ環境の設定
*Guava_HOME* 環境変数を設定して、マシン上のGuava jarが保存されているベースディレクトリの場所を指すようにします。 次のように、さまざまなオペレーティングシステムのGuavaフォルダーにguava-18.0.jarを抽出したと仮定します。
OS | Output |
---|---|
Windows | Set the environment variable Guava_HOME to C:\Guava |
Linux | export Guava_HOME=/usr/local/Guava |
Mac | export Guava_HOME=/Library/Guava |
CLASSPATH変数を設定する
Guava jarの場所を指すように CLASSPATH 環境変数を設定します。 次のように、さまざまなオペレーティングシステムのGuavaフォルダーにguava-18.0.jarを保存したと仮定します。
OS | Output |
---|---|
Windows | Set the environment variable CLASSPATH to %CLASSPATH%;%Guava_HOME%\guava-18.0.jar;.; |
Linux | export CLASSPATH=$CLASSPATH:$Guava_HOME/guava-18.0.jar:. |
Mac | 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
クラスメソッド
Sr.No | Method & Description |
---|---|
1 |
static <T> Optional<T> absent() 含まれる参照のないOptionalインスタンスを返します。 |
2 |
abstract Set<T> asSet() 含まれるインスタンスが存在する場合、含まれるインスタンスのみを要素とする不変のシングルトンSetを返します。それ以外の場合は、空の不変のSet。 |
3 |
abstract boolean equals(Object object) オブジェクトがOptionalインスタンスであり、含まれる参照が互いに等しいか、両方が存在しない場合にtrueを返します。 |
4 |
static <T> Optional<T> fromNullable(T nullableReference) nullableReferenceがnull以外の場合、その参照を含むOptionalインスタンスを返します。それ以外の場合は、absent()を返します。 |
5 |
abstract T get() 含まれているインスタンスを返します。これは存在する必要があります。 |
6 |
abstract int hashCode() このインスタンスのハッシュコードを返します。 |
7 |
abstract boolean isPresent() このホルダーに(null以外の)インスタンスが含まれている場合、trueを返します。 |
8 |
static <T> Optional<T> of(T reference) 指定されたnull以外の参照を含むOptionalインスタンスを返します。 |
9 |
abstract Optional<T> or(Optional<? extends T> secondChoice) 値が存在する場合、このOptionalを返します。それ以外の場合は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
オプションのクラスの例
たとえば、* C:/> Guava。*で選択したエディターを使用して、次のJavaプログラムを作成します。
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
クラスメソッド
Sr.No | Method & Description |
---|---|
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) 開始、終了が配列、リスト、またはサイズの文字列内の有効な位置を指定し、順序どおりであることを確認します。 |
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
前提条件クラスの例
たとえば、* C:/> Guava。*で選択したエディターを使用して、次のJavaプログラムを作成します。
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>
クラスメソッド
Sr.No | Method & Description |
---|---|
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の順序付けを使用する順序付けを返しますが、「tie」の場合は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) この順序付けに従って、指定された反復可能オブジェクトの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) この順序に従って、指定された反復可能オブジェクトの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
注文クラスの例
たとえば、* C:/> Guava。*で選択したエディターを使用して、次のJavaプログラムを作成します。
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]
グアバ-オブジェクトクラス
オブジェクトクラスは、equals、hashCodeなど、すべてのオブジェクトに適用可能なヘルパー関数を提供します。
クラス宣言
以下は com.google.common.base.Objects クラスの宣言です-
@GwtCompatible
public final class Objects
extends Object
クラスメソッド
Sr.No | Method & Description |
---|---|
1 |
static boolean equal(Object a, Object b) nullの可能性がある2つのオブジェクトが等しいかどうかを判断します。 |
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
オブジェクトクラスの例
たとえば、* C:/> Guava。*で選択したエディターを使用して、次のJavaプログラムを作成します。
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
方法
Sr.No | Method & Description |
---|---|
1 |
static <C extends Comparable<?>> Range<C> all() タイプCのすべての値を含む範囲を返します。 |
2 |
boolean apply(C input)Deprecated. Predicateインターフェースを満たすためにのみ提供されます。代わりに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) lower以上、upper以下のすべての値を含む範囲を返します。 |
7 |
static <C extends Comparable<?>> Range<C> closedOpen(C lower, C upper) lower以上、厳密に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) 他の境界がこの範囲の境界の外側に拡張されていない場合、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) 厳密にlowerより大きく、厳密にupperより小さいすべての値を含む範囲を返します。 |
25 |
static <C extends Comparable<?>> Range<C> openClosed(C lower, C upper) 厳密にlowerより大きく、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
範囲クラスの例
たとえば、* C:/> Guava。*で選択したエディターを使用して、次のJavaプログラムを作成します。
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
クラスメソッド
Sr.No | Method & Description |
---|---|
1 |
static List<Throwable> getCausalChain(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) 宣言されたタイプのインスタンスである場合にのみ、スロー可能オブジェクトをそのまま伝播します。 |
6 |
static void propagateIfPossible(Throwable throwable) RuntimeExceptionまたはErrorのインスタンスである場合にのみ、スロー可能オブジェクトをそのまま伝播します。 |
7 |
static <X extends Throwable> void propagateIfPossible(Throwable throwable, Class<X> declaredType) RuntimeException、Error、またはdeclareTypeのインスタンスである場合にのみ、スロー可能オブジェクトをそのまま伝播します。 |
8 |
static <X1 extends Throwable,X2 extends Throwable>void propagateIfPossible(Throwable throwable, Class<X1> declaredType1, Class<X2> declaredType2) 例外がRuntimeException、Error、declaredType1、またはdeclareType2のインスタンスである場合に限り、スロー可能オブジェクトをそのまま伝播します。 |
継承されるメソッド
このクラスは、次のクラスからメソッドを継承します-
- java.lang.Object
Throwablesクラスの例
たとえば、* C:/> Guava。*で選択したエディターを使用して、次のJavaプログラムを作成します。
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では、アプリケーション開発作業における開発者の経験に基づいて、多くの高度なコレクションを紹介しています。 以下に有用なコレクションのリストがあります-
Sr.No | Collection name & Description |
---|---|
1 |
要素の重複を許可するSetインターフェイスの拡張機能。 |
2 |
キーを一度に複数の値にマップできるようにするMapインターフェースの拡張。 |
3 |
逆操作をサポートする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>
インターフェースメソッド
Sr.No | Method & Description |
---|---|
1 |
V apply(K key) 廃止予定です。 Functionインターフェースを満たすために提供されます。代わりに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の例
たとえば、* C:/> Guava。*で選択したエディターを使用して、次のJavaプログラムを作成します。
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は、アプリケーション開発作業における開発者の経験に基づいて、多くの高度な文字列ユーティリティを導入しています。 以下は、有用な文字列ベースのユーティリティのリストです-
Sr.No | Utility name & Description |
---|---|
1 |
オブジェクト、文字列などを結合するユーティリティ |
2 |
文字列を分割するユーティリティ。 |
3 |
文字操作用のユーティリティ。 |
4 |
文字列形式を変更するためのユーティリティ。 |
グアバ-原始ユーティリティ
Javaのプリミティブ型を使用してジェネリックまたはコレクションを入力として渡すことはできないため、Guavaはプリミティブ型をオブジェクトとして処理するためのWrapper Utilitiesクラスを多数提供しました。 以下は、有用なプリミティブ処理ユーティリティのリストです-
Sr.No | Utility name & Description |
---|---|
1 |
プリミティブバイトのユーティリティ。 |
2 |
プリミティブショート用のユーティリティ。 |
3 |
プリミティブintのユーティリティ。 |
4 |
プリミティブロング用のユーティリティ。 |
5 |
プリミティブフロートのユーティリティ。 |
6 |
プリミティブダブルのユーティリティ。 |
7 |
プリミティブ文字用のユーティリティ。 |
8 |
プリミティブブールのユーティリティ。 |
グアバ-数学ユーティリティ
Guavaは、int、long、およびBigIntegerを処理する数学関連のユーティリティクラスを提供します。 以下は有用なユーティリティのリストです-
Sr.No | Utility name & Description |
---|---|
1 |
intの数学ユーティリティ。 |
2 |
長い間数学ユーティリティ。 |
3 |
BigIntegerの数学ユーティリティ。 |