| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

言語まとめ Java

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

言語まとめ Java

言語 まとめ | Java|

準備

参照サイト

環境

言語基本

データ型

データ型
内容
boolean trueもしくはfalse
char UTF-16文字をあらわす、符号なし整数
byte
short
int
long
float
double
文字列
  1. String msg = "hello.";
  2. char[] c1 = {'a', 'b', 'c'];
  3. Sring s1 = new String(c1);
配列
  1. int[] a1 = new int[3];
  2. a1[0] = 1;
  3. a1[1] = 2;
  4. a1[2] = 3;
  5.  
  6. int[] a2 = {1, 2, 3};
  7.  
  8. int[][] a3 = {
  9. {1,2,3},
  10. {4,5,6},
  11. {7,7,9},
  12. };
コレクション
  • List
  1. List l = new ArrayList();
  2. l.put("a");
  3. l.put("b");
  4. // ジェネリックスを使用
  5. List<String> l2 = new ArrayList<String>();
  • Map
  1. Map<String, Object> m = new HashMap<String, Object>();
  2. m.put("foo", new Hoge("foo"));
  3. m.put("bar", new Hoge("bar"));


変数

演算

演算子 内容
++ -- インクリメント、デクリメント
+ - * / 単項 加算、減算、乗算、除算
% 剰余
~ ビット反転
! 否定
(型) キャスト
<< >> >>> シフト >>は符号つき右シフト
< <= >= > 大小比較
== != 相等性、不等性
ビット演算子 AND XOR OR
&& || ブール演算用ショートサーキット
instanceof オブジェクト型比較
?: 条件演算子 char b = (true)?'t':'f';

制御

順次

文の終わりは、;

選択
  • if
  1. if (cond1) {
  2. //
  3. } else if (cond2) {
  4. //
  5. } else {
  6. //
  7. }
  • switch
  1. switch (cond) {
  2. case 1:
  3. //
  4. break;
  5. case 2:
  6. //
  7. break;
  8. defaul:
  9. //
  10. }
繰り返し
  • for
  1. for (int i=0; i<100; i++) {
  2. //
  3. }
  • 拡張for
  1. String[] ss = {"a", "b", "c"};
  2. for(String: ss) {
  3. //
  4. }
  • while
  1. wihle(cond) {
  2. //
  3. }
  4. do {
  5. //
  6. } while(cond);
  7.  
例外
  1. try {
  2. // 例外が発生する可能性がある処理
  3. } catch (Exception e){
  4. // 例外処理
  5. }
  6.  

オブジェクト

クラス
  • 継承

ラムダ式

  • Java8以降では、メソッドも型の一つ
  • メソッドを引数として渡すこともできる。
    • 引数の型と数、戻り値の型が同一であるメソッド参照を渡せるようになる
  • その仕組みが、メソッド参照であり、ラムダ式
メソッド参照
  1. public class MethodRef {
  2.  
  3. public static void main(String[] args) {
  4. // メソッド参照による引き渡し
  5. writeLine("Quote test.", MethodRef::quote);
  6. writeLine("Indent test.", MethodRef::indent);
  7. }
  8. private static void writeLine(String line, Converter converter) {
  9. System.out.println(converter.covert(line));
  10. }
  11.  
  12. /** Converter型に対応したメソッド */
  13. public static String quote(String value) {
  14. return String.format("\"%s\"", value);
  15. }
  16. /** Converter型に対応したメソッド */
  17. public static String indent(String value) {
  18. return String.format("\t%s", value);
  19. }
  20.  
  21. /** Stringを受け取りStringを返すメソッド型 */
  22. @FunctionalInterface
  23. public interface Converter {
  24. String covert(String value);
  25. }
  26. }
  • 結果
  1. "Quote test."
  2. Indent test.
ラムダ式基本
  • 上記のメソッド参照の例では、writeLineメソッドに引き渡すためだけに、quoteおよびindentメソッドを定義している
  • その場限りの利用の場合、メソッド定義を式として表すことができるラムダ式を利用できる
  1. (引数型 仮引数) -> {
  2. メソッド本体
  3. }
  • メソッド参照を使用して書いたコードをラムダで書き換え
  1. public class Lambda {
  2. public static void main(String[] args) {
  3. writeLine("Quote test.", (String value) -> {
  4. return String.format("\"%s\"", value);
  5. });
  6. writeLine("Indent test.", (String value) -> {
  7. return String.format("\t%s", value);
  8. });
  9. }
  10. private static void writeLine(String line, Converter converter) {
  11. System.out.println(converter.covert(line));
  12. }
  13.  
  14. /** Stringを受け取りStringを返すメソッド型 */
  15. @FunctionalInterface
  16. public interface Converter {
  17. String covert(String value);
  18. }
  19. }
java.util.function関数型インターフェース
  • 関数インターフェースを上記では自作したが、java.util.function パッケージで提供されている1
名称 内容
Consumer 値を返さない。処理のみ。
Supplier 値を返す。引数なし。
Function 値を返す。引数あり。
Predicate 真偽値を返す。引数あり。
BinaryOperator 演算結果を返す。引数2つあり。
UnaryOperator 演算結果を返す。引数1つ。
  1. import java.util.function.*;
  2.  
  3. public class BuildInFuncInf {
  4.  
  5. public static void main(String[] args) {
  6. String[] num = {"1","2","3"};
  7.  
  8. printFunc(num, (value) -> Integer.parseInt(value) * 10 );
  9. printFunc(num, (value) -> (int)Math.pow(Integer.parseInt(value),2) );
  10. }
  11. /**
  12. * Stringを引数にとり、Integerを返す関数インターフェース
  13. */
  14. public static void printFunc(String[] params, Function<String, Integer> func) {
  15. for(String param : params) {
  16. System.out.println(String.format("%d", func.apply(param)));
  17. }
  18. }
  19. }
  • 実行結果
  1. 10
  2. 20
  3. 30
  4. 1
  5. 4
  6. 9
ラムダ式の簡単化
  • 本体が一文である場合、{}を省略できる
  • 文の戻り値が暗黙的に戻り値とみなされる
  • 引数型は暗黙で類推されるので省略するのが一般的
  • 引数が1つの場合、くくるかっこも省略できる
  • 引数がない場合はかっこを省略できない
ラムダ式を伴うコレクションのメソッド
メソッド 内容
replaceAll 指定されたルールで置き換え
removeIf 合致した要素を削除
compute/comuteIfPresent/comupteIfAbsent マップに処理の結果を設定
merge 重複したキーの値を加工
  • replaceAll
  1. var list = Arrays.asList("0,1,2", "3,4,5", "6,7,8")
  2. list.replaceAll(v -> v.replace(',','-'));
  3. System.out.println("replaceAll : " + list);
  1. replaceAll : [0-1-2, 3-4-5, 6-7-8]
  • compute
  1. var map = new HashMap<String, String>(Map.of(
  2. "1", "a",
  3. "2", "b",
  4. "3", "c"));
  5. map.compute("2", (k,v) -> k + v);
  6. System.out.println(map);
  1. {1=a, 2=2b, 3=c}

Stream API

  • コレクションなどのデータソースから繰り返し処理をStreamに引き渡す
  • 処理の流れは
  1. ストリーム生成
  2. 中間処理:抽出、加工
  3. 終端処理:出力、集計
  1. var list = Arrays.asList(0,1,2,3,4,5);
  2. list.stream()
  3. .filter(num -> num % 2 == 0)
  4. .map(num -> (int)Math.pow(num, 2))
  5. .forEach(System.out::println);
  1. 0
  2. 4
  3. 16

ファイル

ファイルを読む
ファイルに書く