Somurie Engineer's Blog

今更ながらJava12の新機能をまとめてみた

背景 今までJava8の案件が主だったのですが、最近Java12の案件にも参画させて頂いています。 ただ、開発している中でJava9以降の機能を使っておらず、使える機能がないかを調べる目的でまとめてみました。 今回使用するサンプルコードは以下に全て置いてあります。 https://github.com/somurieengieer/javaSelfTraining/blob/master/src/sample/java12newFunc/Java12sample.java 追加された機能 switch文の追加(プレビュー版) switch文の新たな使い方が追加されました。右辺として使うことができるようになります。 具体的には以下の通りです。 System.out.println("-- アロー構文 --"); int num = 4; switch(num) { case 1, 2, 3 - System.out.println("複数条件を記述できます"); case 4, 5, 6 - { System.out.println("複数行の処理を書くときには"); System.out.println("ブロックで書きます"); } default - System.out.println("条件に合致しない場合"); } System.out.println("-- switch式 --"); String message = switch (num) { case 1, 2, 3 - "複数条件を記述できます"; case 4, 5, 6 - { System.out.println("ブロックの場合はbreakにより値を返却する"); break "ブロックによる記述もできます"; } default - "条件に合致しない場合"; }; System.out.println(message); String transform()の追加 今まで処理メソッドに対してStringの文字列を引数で渡していた処理に対して、transform()を使うとStringの文字列に対して処理を記述することができます。

今更ながらJava11の新機能をまとめてみた

背景 今までJava8の案件が主だったのですが、最近Java12の案件にも参画させて頂いています。 ただ、開発している中でJava9以降の機能を使っておらず、使える機能がないかを調べる目的でまとめてみました。 今回使用するサンプルコードは以下に全て置いてあります。 https://github.com/somurieengieer/javaSelfTraining/blob/master/src/sample/java11newFunc/Java11sample.java 追加された機能 String isBlankの追加 isEmptyに加えて半角/全角スペースもtrueを返します。 (isEmptyは文字列の長さが0の場合のみtrueを返す) ※注意として、該当の変数がnullの場合はNullPointerExceptionを投げます。nullの場合もtrueを返してほしい場合はStringUtils.isEmpty()を使う必要があります。 String strBlank = ""; String strBlankChar = " "; String strJapaneseBlankChar = " "; // 全角ブランク // isBlankでは""、" "、" "の全てにおいてtrueを返す if (strBlank.isBlank() && strBlankChar.isBlank() && strJapaneseBlankChar.isBlank()) { System.out.println("These are judged as Blank"); } // isEmptyでは""のみtrueを返す if (strBlank.isEmpty()) { System.out.println("These are judged as Empty"); } // isEmptyでは""、" "の場合falseを返す if (!strBlankChar.isEmpty() && !strJapaneseBlankChar.isEmpty()) { System.out.println("These are NOT judged as Blank"); } Collection toArrayの追加 Collection型のクラスにtoArrayメソッドが追加されました。メソッド名の通り配列に変換して値を返します。

今更ながらJava10の新機能をまとめてみた

背景 今までJava8の案件が主だったのですが、最近Java12の案件にも参画させて頂いています。 ただ、開発している中でJava9以降の機能を使っておらず、使える機能がないかを調べる目的でまとめてみました。 今回使用するサンプルコードは以下に全て置いてあります。 https://github.com/somurieengieer/javaSelfTraining/blob/master/src/sample/java10newFunc/Java10sample.java 追加された機能 var型の追加 新しい型としてvar型が追加されました。型推論という機能を使って、コンパイル時に右辺の値から型を決定することができます。 略式記述(シンタックスシュガー)です。 var list = new ArrayList<String(); // listはArrayList<String型になる list.add("aaa"); list.add("bbb"); list.stream().forEach(System.out::println); // ローカル変数にのみ使用可能。インスタンス変数は不可 // ラムダ引数には使えないので注意 var i = 10; var s = "aiueo"; // プリミティブ型にも使える List copyOfメソッドの追加 Listを複製する。複製したListは修正不可(追加・削除不可)だが、各要素が参照しているオブジェクト内は修正可能であるため注意。 class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } }; var list = new ArrayList<Person(); list.add(new Person("personA", 1)); var list2 = List.copyOf(list); list2.stream().forEach(System.out::println); // コピー元のListが参照している先のオブジェクトを変更するとコピー元も変更される list.

今更ながらJava9の新機能をまとめてみた

背景 今までJava8の案件が主だったのですが、最近Java12の案件にも参画させて頂いています。 ただ、開発している中でJava9以降の機能を使っておらず、使える機能がないかを調べる目的でまとめてみました。 今回使用するサンプルコードは以下に全て置いてあります。 https://github.com/somurieengieer/javaSelfTraining/blob/master/src/sample/java9newFunc/Java9sample.java 追加された機能 BigInteger sqrt()の追加 BigIntegerで平方根取得のメソッドが追加されました。四捨五入するようで、√2は1を返します。 BigInteger bi1 = new BigInteger("9"); System.out.println(bi1.sqrt()); BigInteger bi2 = new BigInteger("2"); System.out.println(bi2.sqrt()); // sqrt()の返り値はBigIntegerのため、四捨五入されて1が返却される Optional、Stream ifPresentOrElse()の追加 Java8で追加されたOptional、Streamですが、Java9以降にいくつかメソッドが追加されているようです。Java8が展開された後に不足していた機能を充足するメソッド追加のようです。 ifPresentOrElse()ではOptionalの値が存在する場合としない場合の処理をまとめて記載することができます。 Optional<String opt1 = Optional.ofNullable("hoge"); opt1.ifPresentOrElse( s - System.out.println(s + " is exist"), () - System.out.println("not exist") ); Optional<String opt2 = Optional.ofNullable(null); opt2.ifPresentOrElse( s - System.out.println(s + " is exist"), () - System.out.println("not exist") ); streamNullFilter()の追加 Optionalのstream処理をする際に、値がnullの項目を排除することができます。 List<String searchList = new ArrayList<(){ { add("