- 投稿日:2020-08-01T15:53:26+09:00
【Java】JDK 13のSwitch Expressions (Preview)を見てみましょう
OpenJDK 13の5つの重要機能
350: Dynamic CDS Archives
351: ZGC: Uncommit Unused Memory
353: Reimplement the Legacy Socket API
354: Switch Expressions (Preview)
355: Text Blocks (Preview)上記の中でも本日は「Switch Expressions (Preview)」を見ていきたいと思います。
Switch Expressions (Preview)
- JDK 12でもPreviewでしたか13でもPreviewですね。
- Previewなので--enable-previewのオプションを与えないと使えないらしいです。
・Arrow labels
static void howMany(int k) { switch (k) { case 1 -> System.out.println("one"); case 2 -> System.out.println("two"); default -> System.out.println("many"); } }従来の「case L:」をよく使用していましたが、「case L->」のようにも使えるようになりました。
ただ、「case L->」のような書き方をするとfull throughがないためbreakを書かなくてもよいらしいです。呼び出すときは以下となります。
howMany(1); howMany(2); howMany(3);結果
one two many・Switch expressions
switchがexpressionで使えるようになりました。
static void howMany(int k) { System.out.println( switch (k) { case 1 -> "one" case 2 -> "two" default -> "many" } ); }なので、switch文の結果を変数に代入することもできます。
T result = switch (arg) { case L1 -> e1; case L2 -> e2; default -> e3; };・Yielding a value
「yield」キーワードが追加されました。
int j = switch (day) { case MONDAY -> 0; case TUESDAY -> 1; default -> { int k = day.toString().length(); int result = f(k); yield result; // switch文の戻り値を設定 } };「yield」は"case L:"式のswitch文の中でも使用できます。
int result = switch (s) { case "Foo": yield 1; case "Bar": yield 2; default: System.out.println("Neither Foo nor Bar, hmmm..."); yield 0; };参考
- 投稿日:2020-08-01T13:52:00+09:00
【アルゴリズム】文字列の降順
問題説明
文字列sのパラメータを受け取り、降順でソートを行って新しい文字列を返却するメソッドsolutionを作成してください。
sは英文字の小文字、大文字のみで構成されていて、大文字は小文字より値が小さい値として扱う。条件
- パラメータ:sの長さは1以上の文字列です。
入出力の例
x result "Zbcdefg" "gfedcbZ" 解説
※解説は私が作成したコードなので、もっといいアルゴリズム等々ありましたら、共有してください!
方法1
class Solution { public String solution(String s) { return Stream.of(s.split("")) // 文字列を1文字ずつ分割 .sorted(Comparator.reverseOrder()) // 降順にソート .collect(Collectors.joining()); // 分割した文字列を1つの文字列にする。 } }方法2
class Solution { public String solution(String s) { char[] sol = s.toCharArray(); // 文字列からchar配列を取得 Arrays.sort(sol); // "Zbcdefg" // StringBuilderのreverseを利用して逆順にする。 return new StringBuilder(new String(sol)).reverse().toString(); } }※個人的には「方法1」のほうが簡略で読みやすくて好きですが、
速度のほうは「方法2」のほうが早いですね。
- 投稿日:2020-08-01T11:31:36+09:00
【アルゴリズム】Xだけ間隔がのあるN個の数字
問題説明
メソッドsolutionは整数xと自然数nのパラメータを受け取り、xから初めてxずつ増加する数字をn個もつリストをリターンします。
次の条件を見ていただき、条件を満足させるメソッドsolutionを作成してください。条件
- xは-10000000以上、10000000以下の整数である。
- nは1000以下の自然数である。
入出力の例
x n result 2 5 [2,4,6,7,10] 4 3 [4,8,12] -4 2 [-4,-8] 解説
※解説は私が作成したコードなので、もっといいアルゴリズム等々ありましたら、共有してください!
class Solution { public long[] solution(int x, int n) { long[] result = new long[n]; result[0] = x; // xから初めるので、Index 0にxを初期化 // 上記で0番は初期化したので、iは1からスタートし、nまで繰り返し for (int i = 1; i < n; i++) { // xずつ増加していくので、resultのIndex:i - 1の値 + xを行う。 result[i] = result[i - 1] + x; } return result; } }