Guavaのcom.google.common.primitives.Doubles
の利用サンプルです。
Doublesクラスはdouble型の値に対するユーティリティメソッドなどを提供しています。
サンプルコードで試したのは以下の通りです。
double配列 ⇒ List<Double> の変換
■API
Doubles#asList
■サンプル
double[] srcArray = new double[] { 1.0, 2.1, 3.2, 5.3 }; List<Double> destList = Doubles.asList(srcArray); System.out.println("destList : " + destList); // double[] ⇒ List<Double> の変換はArrays.asListではできない // List<Double> bList = Arrays.asList(srcArray); ← コンパイルエラー
■実行結果
destList : [1.0, 2.1, 3.2, 5.3]
DoubleのCollection ⇒ double配列 の変換
■API
Doubles#toArray
■サンプル
List<Double> srcList = Doubles.asList(1.1, 1.11, 10.111, 100.1111); double[] destArray1 = Doubles.toArray(srcList); System.out.println("destArray1 : " + Arrays.toString(destArray1)); // List<Double> ⇒ double[] の変換はCollection.toArrayではできない // double[] array = (double[]) srcList.toArray(new double[srcList.size()]); ← コンパイルエラー
■実行結果
destArray1 : [1.1, 1.11, 10.111, 100.1111]
複数のdouble配列を結合して一つのdouble配列にする
■API
Doubles#concat
■サンプル
double[] srcArray1 = new double[] { 1.0, 2.123 }; double[] srcArray2 = new double[] { 1000.9, 2000.5 }; double[] destArray2 = Doubles.concat(srcArray1, srcArray2); System.out.println("destArray2 : " + Arrays.toString(destArray2));
■実行結果
destArray2 : [1.0, 2.123, 1000.9, 2000.5]
double配列の各要素を指定した区切り文字列で連結
■API
Doubles#join
■サンプル
double[] srcArray3 = new double[] { 2013.0, 4.0, 10.0 }; String joinedStr = Doubles.join("/", srcArray3); System.out.println("joinedStr : " + joinedStr);
■実行結果
joinedStr : 2013.0/4.0/10.0
double配列の中の最大値、最小値を取得
■API
Doubles#max
Doubles#min
■サンプル
double[] array1 = new double[] { 10.0, 11.1, 12.2, 5.3, 1.4, 100.5, 200.6, 300.7 }; System.out.println(Arrays.toString(array1) + " max -> " + Doubles.max(array1)); System.out.println(Arrays.toString(array1) + " min -> " + Doubles.min(array1));
■実行結果
[10.0, 11.1, 12.2, 5.3, 1.4, 100.5, 200.6, 300.7] max -> 300.7 [10.0, 11.1, 12.2, 5.3, 1.4, 100.5, 200.6, 300.7] min -> 1.4
double配列の中の指定の値を含むかどうか
■API
Doubles#contains
■サンプル
double[] array2 = new double[] { 10.0, 11.1, 12.2, 5.3, 1.4, 100.5, 200.6, 300.7 }; System.out.println(Arrays.toString(array2) + " contains 5.3 -> " + Doubles.contains(array2, 5.3)); System.out.println(Arrays.toString(array2) + " contains 0.0 -> " + Doubles.contains(array2, 0.0));
■実行結果
[10.0, 11.1, 12.2, 5.3, 1.4, 100.5, 200.6, 300.7] contains 5.3 -> true [10.0, 11.1, 12.2, 5.3, 1.4, 100.5, 200.6, 300.7] contains 0.0 -> false
double型の値の比較
■API
Doubles#compare
■サンプル
System.out.println("1.9 compare 2.0 -> " + Doubles.compare(1.9, 2.0)); System.out.println("2.01 compare 1.99 -> " + Doubles.compare(2.01, 1.99)); System.out.println("1.001 compare 1.001 -> " + Doubles.compare(1.001, 1.001));
■実行結果
1.9 compare 2.0 -> -1 2.01 compare 1.99 -> 1 1.001 compare 1.001 -> 0
有限値かどうかのチェック
指定の値が有限値かどうか(無限や非数でないこと)をチェックします
■API
Doubles#isFinite
■サンプル
System.out.println("1000" + " isFinite -> " + Doubles.isFinite(1000)); System.out.println("1.9" + " isFinite -> " + Doubles.isFinite(1.9999)); System.out.println(Double.POSITIVE_INFINITY + " isFinite -> " + Doubles.isFinite(Double.POSITIVE_INFINITY)); System.out.println(Double.NEGATIVE_INFINITY + " isFinite -> " + Doubles.isFinite(Double.NEGATIVE_INFINITY)); System.out.println(Double.NaN + " isFinite -> " + Doubles.isFinite(Double.NaN));
■実行結果
1000 isFinite -> true 1.9 isFinite -> true Infinity isFinite -> false -Infinity isFinite -> false NaN isFinite -> false
試したソースコードの全体は以下です。
import java.util.Arrays; import java.util.List; import com.google.common.primitives.Doubles; public class DoublesClient { public static void main(String[] args) { // double[] ⇒ List<Double> の変換 System.out.println("### Doubles.asList execute"); double[] srcArray = new double[] { 1.0, 2.1, 3.2, 5.3 }; List<Double> destList = Doubles.asList(srcArray); System.out.println("destList : " + destList); // double[] ⇒ List<Double> の変換はArrays.asListではできない // List<Double> bList = Arrays.asList(srcArray); ← コンパイルエラー // DoubleのCollection ⇒ double[] の変換 System.out.println("### Doubles.toArray execute"); List<Double> srcList = Doubles.asList(1.1, 1.11, 10.111, 100.1111); double[] destArray1 = Doubles.toArray(srcList); System.out.println("destArray1 : " + Arrays.toString(destArray1)); // List<Double> ⇒ double[] の変換はCollection.toArrayではできない // double[] array = (double[]) srcList.toArray(new double[srcList.size()]); ← コンパイルエラー // 複数のdouble配列を結合して一つのdouble配列にする System.out.println("### Doubles.concat execute"); double[] srcArray1 = new double[] { 1.0, 2.123 }; double[] srcArray2 = new double[] { 1000.9, 2000.5 }; double[] destArray2 = Doubles.concat(srcArray1, srcArray2); System.out.println("destArray2 : " + Arrays.toString(destArray2)); // double配列の各要素を指定した区切り文字列で連結した文字列を取得 System.out.println("### Doubles.join execute"); double[] srcArray3 = new double[] { 2013.0, 4.0, 10.0 }; String joinedStr = Doubles.join("/", srcArray3); System.out.println("joinedStr : " + joinedStr); // double配列の中の最大値、最小値を取得 System.out.println("### Doubles.max,min execute"); double[] array1 = new double[] { 10.0, 11.1, 12.2, 5.3, 1.4, 100.5, 200.6, 300.7 }; System.out.println(Arrays.toString(array1) + " max -> " + Doubles.max(array1)); System.out.println(Arrays.toString(array1) + " min -> " + Doubles.min(array1)); // double配列の中の指定の値を含むかどうかを取得 System.out.println("### Doubles.contains execute"); double[] array2 = new double[] { 10.0, 11.1, 12.2, 5.3, 1.4, 100.5, 200.6, 300.7 }; System.out.println(Arrays.toString(array2) + " contains 5.3 -> " + Doubles.contains(array2, 5.3)); System.out.println(Arrays.toString(array2) + " contains 0.0 -> " + Doubles.contains(array2, 0.0)); // double型の値の比較(compare) System.out.println("### Doubles.compare execute"); System.out.println("1.9 compare 2.0 -> " + Doubles.compare(1.9, 2.0)); System.out.println("2.01 compare 1.99 -> " + Doubles.compare(2.01, 1.99)); System.out.println("1.001 compare 1.001 -> " + Doubles.compare(1.001, 1.001)); // 有限値かどうかをチェックする System.out.println("### Doubles.isFinite execute"); System.out.println("1000" + " isFinite -> " + Doubles.isFinite(1000)); System.out.println("1.9" + " isFinite -> " + Doubles.isFinite(1.9999)); System.out.println(Double.POSITIVE_INFINITY + " isFinite -> " + Doubles.isFinite(Double.POSITIVE_INFINITY)); System.out.println(Double.NEGATIVE_INFINITY + " isFinite -> " + Doubles.isFinite(Double.NEGATIVE_INFINITY)); System.out.println(Double.NaN + " isFinite -> " + Doubles.isFinite(Double.NaN)); } }