初めに
現場で初めて本格的にJavaを扱うことがあり、C#をやっていた時と比較して、結構違う内容があったので、覚えた内容を残していきます。
一部認識齟齬などがあればすみません。
「java.util.Objects」を使用した比較
Objects.isNull(Obj)
オブジェクトがNULLであることをメインでチェックする場合
→ オブジェクトがNULLの場合は、true
→ オブジェクトがNULLでない場合は、false
// Objectの宣言
Object obj = null;
// NULLチェック
if (Objects.isNull(strFruit)) {
System.out.println("NULL"); // 通る
} else {
System.out.println("NULLでない");
}
Objects.nonNull(Obj)
オブジェクトがNULLでないことをメインでチェックする場合
→ オブジェクトがNULLでない場合は、true
→ オブジェクトがNULLの場合は、false
// Objectの宣言
Object obj = null;
// NULLでないチェック
if (Objects.nonNull(obj)) {
System.out.println("NULLでない");
} else {
System.out.println("NULL"); // 通る
}
Objects.equals(Obj1, Obj2)
2つのオブジェクトが等価であることをチェックする場合
→ 等価である場合は、true
→ 等価でない場合は、false
// Objectの宣言
Object obj1 = 'a';
Object obj2 = 'a';
// 等価チェック
if (Objects.equals(obj1, obj2)) {
System.out.println("等価"); // 通る
} else {
System.out.println("等価でない");
}
BigDecimal系の比較や計算
・Integer型の通常の計算と違って、扱いづらいBigDecimal型(小数点を使用するfloat型に近いイメージ)
BigDecimal同士の比較は「compareTo」を使用する
→ int 比較結果 = 比較元BigDecimal.compareTo(比較先BigDecimal);
「-1」: 比較元BigDecimalが比較先BigDecimalより小さい、
「0」: 比較元BigDecimalが比較先BigDecimalが等しい
「1」: 比較元BigDecimalが比較先Bigecimalより大きい
// -------------BigDecimal計算--------------
BigDecimal val1 = new BigDecimal("1.1");
BigDecimal val2 = new BigDecimal("2.2");
BigDecimal val3 = new BigDecimal("2");
// 「-1」チェック
if(val1.compareTo(val2) == -1) {
System.out.println("val1がval2より小さいです。"); // 通る
System.out.println("val1:" + val1 + " val2:" + val2); // val1:1.1 val2:2.2
}
// 「0」チェック
val1 = new BigDecimal("1.1"); //val1 = 1.1
val1 = val2.subtract(val1.multiply(val3)); // val1 = 2.2 - (1.1 * 2)
if(val1.compareTo(BigDecimal.ZERO) == 0) {
System.out.println("val1は0です。"); // 通る
}
// 「1」チェック
val1 = new BigDecimal("1.1");
if(val1.compareTo(BigDecimal.ZERO) == 1) {
System.out.println("val1が0より大きいです。"); // 通る
System.out.println("val1:" + val1); // val1:1.1
}
BigDecimal同士での加算、減算、乗算、除算を使用する場合
加算: BigDecimal.add
減算: BigDecimal.subtract
乗算: BigDecimal.multiply
除算: BigDecimal.divide
val1 = new BigDecimal("1.1");
val2 = new BigDecimal("3.3");
BigDecimal valAdd = val1.add(val2);
System.out.println("加算結果:" + valAdd); // 加算結果:4.4
BigDecimal valSubstarct = val2.subtract(val1);
System.out.println("減算結果:" + valSubstarct); // 減算結果:2.2
BigDecimal valMultiply = val1.multiply(val2);
System.out.println("乗算結果:" + valMultiply); // 乗算結果:3.63
BigDecimal valDivide = val2.divide(val1);
System.out.println("除算結果:" + valDivide); // 除算結果:3
「CollectionUtils」を使用した比較
CollectionUtils.isEmpty(Collection)
コレクションがNULであることをメインでチェックする場合
→ コレクション内がNULLまたは空の場合は、true
→ コレクション内がNULLまたは空でない場合は、false
List<String> list = new ArrayList<String>(3);
list.add("あいうえお");
list.add("かきくけこ");
list.add("さしすせそ");
List<String> branklist = new ArrayList<>();
if(CollectionUtils.isEmpty(list)) {
System.out.println("リストの内容は未設定①");
}
if(CollectionUtils.isEmpty(branklist)) {
System.out.println("リストの内容は未設定②"); // 通る
}
// 否定チェック
if(!CollectionUtils.isEmpty(list)) {
System.out.println("リストの内容は設定済み①"); // 通る
}
// 否定チェック
if(!CollectionUtils.isEmpty(branklist)) {
System.out.println("リストの内容は設定済み②");
}
コレクション内の内容に対して、一致・不一致チェック
allMatch
→ コレクション内の全ての内容と判定が全て一致する場合はtrue
→ コレクション内の全ての内容と判定が全て一致しない場合はfalse
anyMatch
→ コレクション内の内容と判定が一部一致する場合はtrue
→ コレクション内の内容と判定が一部一致しない場合はfalse
noneMatch
→ コレクション内の全ての内容と判定が全て一致しない場合はtrue
→ コレクション内の内容と一部一致する場合はfalse
// -------------allMatch()、anyMatch()、noneMatch()--------------
ArrayList<Person> personList = new ArrayList<>();
personList.add(new Person(165.1));
personList.add(new Person(166.2));
boolean flg = false;
// -------------allMatch()---------
flg = personList.stream().allMatch(person
-> person.getHeight() > 165.0);
if (flg) {
System.out.println("①全て165.0より大きい"); // 通る
}
flg = personList.stream().allMatch(person
-> person.getHeight() > 165.2);
if (flg) {
System.out.println("②全て165.2より大きい");
}
// -------------anyMatch()---------
flg = personList.stream().anyMatch(person
-> person.getHeight() > 165.2);
if (flg) {
System.out.println("③一部が165.2より大きい");// 通る
}
// -------------noneMatch()---------
flg = personList.stream().noneMatch(person
-> person.getHeight() > 169.2);
if (flg) {
System.out.println("④全て169.2より小さい");// 通る
}
【Personクラス】
package com.example.demo;
public class Person {
private double height;
public Person(double height) {
this.height = height;
}
public double getHeight() {
return height;
}
}
JapaneseDateを用いた日付変換
クラスJapaneseDateを用いた変換
// -------------JapaneseDate-------------
// Format設定
final ZoneId tokyo = ZoneId.of("Asia/Tokyo");
final DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendText(ChronoField.ERA)
.appendText(ChronoField.YEAR_OF_ERA)
.appendLiteral("年")
.appendText(ChronoField.MONTH_OF_YEAR)
.appendText(ChronoField.DAY_OF_MONTH)
.appendLiteral("日")
.toFormatter(Locale.JAPAN);
final DateTimeFormatter iso = DateTimeFormatter.ISO_DATE;
// 月の先頭に0なし
try {
final JapaneseDate meiji = JapaneseDate.of(2021, 4, 30);
System.out.println(meiji.format(formatter));
System.out.println("2021/4/30は存在する日付です"); // 通る
} catch (Exception e) {
System.out.println(e.getClass().getCanonicalName());
System.out.println(e.getMessage());
System.out.println("2021/4/30は存在しない日付です");
}
// 月の先頭に0あり
try {
final JapaneseDate meiji = JapaneseDate.of(2021, 04, 30);
System.out.println(meiji.format(formatter));
System.out.println("2021/04/30は存在する日付です"); // 通る
} catch (Exception e) {
System.out.println(e.getClass().getCanonicalName());
System.out.println(e.getMessage());
System.out.println("2021/04/30は存在しない日付です");
}
// 存在しない日付
try {
final JapaneseDate meiji = JapaneseDate.of(2021, 06, 31);
System.out.println(meiji.format(formatter));
System.out.println("2021/6/31は存在する日付です");
} catch (Exception e) {
System.out.println(e.getClass().getCanonicalName());
System.out.println(e.getMessage());
System.out.println("2021/6/31は存在しない日付です"); // 通る
}
終わりに
本当にJava始めたばかりなので、あっさりした書き方になりましたが、また今後も覚えたものは
コードで書いていき、定期的に備忘録として、キャッチアップしていきます。