言語まとめ Java
ナビゲーションに移動
検索に移動
言語まとめ Java
準備
参照サイト
- JDK6 ドキュメント http://java.sun.com/javase/ja/6/docs/ja/
- Java言語規定 第三版 http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html
環境
言語基本
データ型
データ型
型 | 内容 |
---|---|
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に引き渡す
- 処理の流れは
- ストリーム生成
- 中間処理:抽出、加工
- 終端処理:出力、集計
- 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
ファイル
ファイルを読む
ファイルに書く
© 2006 矢木浩人