現場で覚えたJava文法知識【備忘録】①

# 初めに

現場で初めて本格的にJavaを扱うことがあり、C#をやっていた時と比較して、結構違う内容があったので、覚えた内容を残していきます。
一部認識齟齬などがあればすみません。

##  「java.util.Objects」を使用した比較

###  Objects.isNull(Obj)

オブジェクトがNULLであることをメインでチェックする場合
→ オブジェクトがNULLの場合は、true
→ オブジェクトがNULLでない場合は、false
```java:InputPractice1.java
    // 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
```java:InputPractice1.java
    // 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
```java:InputPractice1.java
    // 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より大きい
```java:InputPractice1.java
    // -------------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は０です。"); // 通る
    }

    // 「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

```java:InputPractice1.java
    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

```java:InputPractice1.java
    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

```java:InputPractice1.java
    // -------------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クラス】
```java:InputPractice1.java
package com.example.demo;

public class Person {
    private double height;

    public Person(double height) {
        this.height = height;
    }

    public double getHeight() {
        return height;
    }
}
```

##  JapaneseDateを用いた日付変換

###  クラスJapaneseDateを用いた変換
```java:InputPractice1.java
    // -------------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始めたばかりなので、あっさりした書き方になりましたが、また今後も覚えたものは
コードで書いていき、定期的に備忘録として、キャッチアップしていきます。