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

MyMemoWiki

「言語まとめ Java」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の17版が非表示)
1行目: 1行目:
 
==[[言語まとめ Java]]==
 
==[[言語まとめ Java]]==
 
[[言語 まとめ]] | [[Java]]|
 
[[言語 まとめ]] | [[Java]]|
 +
 +
{{amazon|4798151122}}
 
===準備===
 
===準備===
 
====参照サイト====
 
====参照サイト====
169行目: 171行目:
 
=====クラス=====
 
=====クラス=====
 
*継承
 
*継承
====ラムダ式/Stream API====
+
====ラムダ式====
 
*Java8以降では、メソッドも型の一つ
 
*Java8以降では、メソッドも型の一つ
 
*メソッドを引数として渡すこともできる。
 
*メソッドを引数として渡すこともできる。
237行目: 239行目:
 
!名称!!内容
 
!名称!!内容
 
|-
 
|-
|
+
|Consumer||値を返さない。処理のみ。
 +
|-
 +
|Supplier||値を返す。引数なし。
 +
|-
 +
|Function||値を返す。引数あり。
 +
|-
 +
|Predicate||真偽値を返す。引数あり。
 +
|-
 +
|BinaryOperator||演算結果を返す。引数2つあり。
 +
|-
 +
|UnaryOperator||演算結果を返す。引数1つ。
 +
|}
 +
 
 +
import java.util.function.*;
 +
 +
public class BuildInFuncInf {
 +
 +
    public static void main(String[] args) {
 +
        String[] num = {"1","2","3"};
 +
 +
        printFunc(num, (value) -> Integer.parseInt(value) * 10 );
 +
        printFunc(num, (value) -> (int)Math.pow(Integer.parseInt(value),2) );
 +
    }
 +
    /**
 +
      * Stringを引数にとり、Integerを返す関数インターフェース
 +
      */
 +
    public static void printFunc(String[] params, Function<String, Integer> func) {
 +
        for(String param : params) {
 +
            System.out.println(String.format("%d", func.apply(param)));
 +
        }
 +
    }
 +
}
 +
*実行結果
 +
10
 +
20
 +
30
 +
1
 +
4
 +
9
 +
 
 +
=====ラムダ式の簡単化=====
 +
*本体が一文である場合、{}を省略できる
 +
*文の戻り値が暗黙的に戻り値とみなされる
 +
*引数型は暗黙で類推されるので省略するのが一般的
 +
*引数が1つの場合、くくるかっこも省略できる
 +
*引数がない場合はかっこを省略できない
 +
=====ラムダ式を伴うコレクションのメソッド=====
 +
{|class="wikitable"
 +
!メソッド!!内容
 
|-
 
|-
|
+
|replaceAll||指定されたルールで置き換え
 
|-
 
|-
|
+
|removeIf||合致した要素を削除
 
|-
 
|-
|
+
|compute/comuteIfPresent/comupteIfAbsent||マップに処理の結果を設定
 
|-
 
|-
|
+
|merge||重複したキーの値を加工
 
|}
 
|}
 +
*replaceAll
 +
var list = Arrays.asList("0,1,2", "3,4,5", "6,7,8")
 +
list.replaceAll(v -> v.replace(',','-'));
 +
System.out.println("replaceAll : " + list);
 +
 +
replaceAll : [0-1-2, 3-4-5, 6-7-8]
 +
 +
*compute
 +
var map = new HashMap<String, String>(Map.of(
 +
    "1", "a",
 +
    "2", "b",
 +
    "3", "c"));
 +
map.compute("2", (k,v) -> k + v);
 +
System.out.println(map);
 +
 +
{1=a, 2=2b, 3=c}
 +
 +
===Stream API===
 +
*コレクションなどのデータソースから繰り返し処理をStreamに引き渡す
 +
*処理の流れは
 +
#ストリーム生成
 +
#中間処理:抽出、加工
 +
#終端処理:出力、集計
 +
 +
  var list = Arrays.asList(0,1,2,3,4,5);
 +
  list.stream()
 +
        .filter(num -> num % 2 == 0)
 +
        .map(num -> (int)Math.pow(num, 2))
 +
        .forEach(System.out::println);
  
 +
0
 +
4
 +
16
 
====ファイル====
 
====ファイル====
 
=====ファイルを読む=====
 
=====ファイルを読む=====
 
=====ファイルに書く=====
 
=====ファイルに書く=====

2020年4月16日 (木) 16:25時点における最新版

言語まとめ Java

言語 まとめ | Java|

準備

参照サイト

環境

言語基本

データ型

データ型
内容
boolean trueもしくはfalse
char UTF-16文字をあらわす、符号なし整数
byte
short
int
long
float
double
文字列
String msg = "hello.";
char[] c1 = {'a', 'b', 'c'];
Sring s1 = new String(c1);
配列
int[] a1 = new int[3];
a1[0] = 1;
a1[1] = 2;
a1[2] = 3;

int[] a2 = {1, 2, 3};

int[][] a3 = {
  {1,2,3},
  {4,5,6},
  {7,7,9},
};
コレクション
  • List
List l = new ArrayList();
l.put("a");
l.put("b");
// ジェネリックスを使用
List<String> l2 = new ArrayList<String>();
  • Map
Map<String, Object> m = new HashMap<String, Object>();
m.put("foo", new Hoge("foo"));
m.put("bar", new Hoge("bar"));


変数

演算

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

制御

順次

文の終わりは、;

選択
  • if
if (cond1) {
  // 
} else if (cond2) {
  // 
} else {
  // 
}
  • switch
switch (cond) {
case 1:
   //
   break;
case 2:
   //
   break;
defaul:
   //
} 
繰り返し
  • for
for (int i=0; i<100; i++) {
   //
}
  • 拡張for
String[] ss = {"a", "b", "c"};
for(String s : ss) {
   //
}
  • while
wihle(cond) {
  //
}
do {
  //
} while(cond);

例外
try {
  // 例外が発生する可能性がある処理
} catch (Exception e){
  // 例外処理
}

オブジェクト

クラス
  • 継承

ラムダ式

  • Java8以降では、メソッドも型の一つ
  • メソッドを引数として渡すこともできる。
    • 引数の型と数、戻り値の型が同一であるメソッド参照を渡せるようになる
  • その仕組みが、メソッド参照であり、ラムダ式
メソッド参照
public class MethodRef {

    public static void main(String[] args) {
        // メソッド参照による引き渡し
        writeLine("Quote test.", MethodRef::quote);  
        writeLine("Indent test.", MethodRef::indent);
    }
    private static void writeLine(String line, Converter converter) {
        System.out.println(converter.covert(line));
    }

    /** Converter型に対応したメソッド */
    public static String quote(String value) {
        return String.format("\"%s\"", value);
    }
    /** Converter型に対応したメソッド */
    public static String indent(String value) {
        return String.format("\t%s", value);
    }

    /** Stringを受け取りStringを返すメソッド型 */
    @FunctionalInterface
    public interface Converter {
        String covert(String value);
    }
}
  • 結果
"Quote test."
        Indent test.
ラムダ式基本
  • 上記のメソッド参照の例では、writeLineメソッドに引き渡すためだけに、quoteおよびindentメソッドを定義している
  • その場限りの利用の場合、メソッド定義を式として表すことができるラムダ式を利用できる
(引数型 仮引数) -> {
     メソッド本体
}
  • メソッド参照を使用して書いたコードをラムダで書き換え
public class Lambda {
    public static void main(String[] args) {
        writeLine("Quote test.", (String value) -> {
            return String.format("\"%s\"", value);
        });
        writeLine("Indent test.", (String value) -> {
            return String.format("\t%s", value);
        });
    }
    private static void writeLine(String line, Converter converter) {
        System.out.println(converter.covert(line));
    }

    /** Stringを受け取りStringを返すメソッド型 */
    @FunctionalInterface
    public interface Converter {
        String covert(String value);
    }
}
java.util.function関数型インターフェース
  • 関数インターフェースを上記では自作したが、java.util.function パッケージで提供されている1
名称 内容
Consumer 値を返さない。処理のみ。
Supplier 値を返す。引数なし。
Function 値を返す。引数あり。
Predicate 真偽値を返す。引数あり。
BinaryOperator 演算結果を返す。引数2つあり。
UnaryOperator 演算結果を返す。引数1つ。
import java.util.function.*;

public class BuildInFuncInf {

    public static void main(String[] args) {
        String[] num = {"1","2","3"};

        printFunc(num, (value) -> Integer.parseInt(value) * 10 );
        printFunc(num, (value) -> (int)Math.pow(Integer.parseInt(value),2) );
    }
    /**
     * Stringを引数にとり、Integerを返す関数インターフェース
     */
    public static void printFunc(String[] params, Function<String, Integer> func) {
        for(String param : params) {
            System.out.println(String.format("%d", func.apply(param)));
        }
    }
}
  • 実行結果
10
20
30
1
4
9
ラムダ式の簡単化
  • 本体が一文である場合、{}を省略できる
  • 文の戻り値が暗黙的に戻り値とみなされる
  • 引数型は暗黙で類推されるので省略するのが一般的
  • 引数が1つの場合、くくるかっこも省略できる
  • 引数がない場合はかっこを省略できない
ラムダ式を伴うコレクションのメソッド
メソッド 内容
replaceAll 指定されたルールで置き換え
removeIf 合致した要素を削除
compute/comuteIfPresent/comupteIfAbsent マップに処理の結果を設定
merge 重複したキーの値を加工
  • replaceAll
var list = Arrays.asList("0,1,2", "3,4,5", "6,7,8")
list.replaceAll(v -> v.replace(',','-'));
System.out.println("replaceAll : " + list);
replaceAll : [0-1-2, 3-4-5, 6-7-8]
  • compute
var map = new HashMap<String, String>(Map.of(
    "1", "a", 
    "2", "b", 
    "3", "c")); 
map.compute("2", (k,v) -> k + v);
System.out.println(map);
{1=a, 2=2b, 3=c}

Stream API

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

ファイル

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