LoginSignup
1
0

More than 5 years have passed since last update.

[作成中]Javaでのコーディングについての備忘録

Last updated at Posted at 2018-10-02

文字列の比較について

Javaで文字列と文字列が一致しているか否かをチェックする場合、==演算子を使うのは厳禁!
equalsメソッドを使うこと!

equalsメソッドの注意点

・hoge.equals(“Hello”)においてhogeがnullの場合には例外が発生する
例外は“Hello”.equals(hoge)のように値を先に持ってくる、またはhoge != nullと判定することで防止できる

コメント

書き方

1行の場合
//コメント
複数行の場合
/*
* コメント
*/

Javadocについて

書き方

/**
 * Description(概要説明 +詳細説明)
 *
 * block tags...(ブロックタグ)
 */

タグ 説明

@param パラメータ(引数)についての説明。
@return 戻り値についての説明。
@author プログラムの作成者についての説明。
@throw 投げられる例外についての説明。

参考文献

コメントの種類について
Javadocの基礎知識について
Javadoc ドキュメンテーションコメントの書き方

Map

Mapとは

値ひとつひとつに「キー」が存在しており、「キー」と「値」がペアになっている。

使い方

HashMapで初期化する必要がある。

MapのオブジェクトをHashMapクラスを使って宣言するには、以下のように記述します。

Java
Map<キーの型名, 値の型名> オブジェクト名 = new HashMap<>();

putで要素を追加

以下のように記述します。

Java
Map型オブジェクト名.put(キー, );

getで要素を取得

Java
Map型オブジェクト名.get(キー);

Mapの要素をループで処理する方法

for、foreachでループ処理

Mapに登録されているデータを一括で扱う際にはループで処理するのが一般的である。

Javaにはforeachという命令はありませんが、他言語で言うところのforeachと同じ処理方法が備わっています。

それを拡張for文といいます。

以下のように記述します。

Java
for( 変数名 : List名){
    System.out.println(変数名);
}
iteratorでループ処理

Iteratorという仕組みを使ってもループ処理を書くことができます。

以下のように記述します。

Java
for(Iterator<Map.Entry<キーの型名, 値の型名>> iterator = map.entrySet().iterator() ; iterator.hasNext() ;){
    Map.Entry<キーの型名, 値の型名> entry = iterator.next();
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

Mapのkeyの値の取得、検索

keySetでkeyを取得

配列やListと違いMapには「キー」という仕組みが存在しています。

Mapの「キー」の名前だけ取得するには、keySetメソッドを使用します。

以下のように記述します。

Java
Map型オブジェクト名.keySet()
containsKeyでkeyを検索

Mapの中に特定の「キー」が含まれているかどうかは、containsKeyメソッドを使って判断します。

以下のように記述します。

Java
Map型オブジェクト名.containsKey(検索するキー)

三項条件演算子

使い方

条件式 ? 式1 : 式2

条件式を評価し、true(真)だった場合には式 1 を、false(偽)だった場合には式 2 を返します。
なお、条件演算子の記述で気を付けなくてはならないのは、式 1 と式 2 のデータ型を同じにすることです。
条件式の結果として何かの数値なり文字なりが戻されるので、条件式の TRUE(真)と FALSE(偽)で戻るデータ型が異なると都合が悪いからです。

具体的なプログラムは、以下のようになります。

実装例

ConditionalTest.java
/* ConditionalTest */
public class ConditionalTest {
    public static void main(String[] args) {
        int i = 2;
        int j = 3;
        int k = (i > j) ? 4 : 0;

        System.out.println("k = " + k);

        System.out.println("i = " + i);
        System.out.println((i >= j) ? "iは3以上" : "iは3以下");
    }
}

コンパイルと実行結果

C:\java>java ConditionalTest
k = 0
i = 2
iは3以下

ゼロ埋めする方法

format関数を用います。
参考:http://write-remember.com/program/java/format/

記述方法

用途  記述例                備考
文字列の先頭を空白埋めする String.format("%6s", "abc") 指定文字列を最大6桁まで文字列の左側に空文字を追加します。
文字列の後ろへ空白埋めする String.format("%-6s", "abc") 指定文字列を最大6桁まで文字列の右側に空文字を追加します。
数字の先頭を0埋めする String.format("%06d", 123) 指定数字を最大6桁まで文字列の左側にゼロパディングします。
数字を3桁ごとにカンマ区切りする String.format("%,d", 123456789) 指定数字を3桁毎にカンマ区切りします

使い方

第一引数に、桁数(以下の例では、6桁("%6s"))を設定し、
第二引数にターゲットの文字列を設定します。

実装例

test.java
public void formatTest2() {
    // 期待値
    String expected = "123";
    // resultには000123が代入される
    String result = String.format("%6s", "123").replace(" ", "0");

Stream APIの使い方

filter

中間操作です。
引数には T -> boolean となるラムダ式を渡してます。
式がtrueの要素だけを集めます。

forEach

forEach の引数には (T) -> void となるラムダ式を渡してあげます。
要素を1つずつ取り出し何らかの処理をする終端操作です。
使い方は以下を参考にしてください。

実装例

リストに開始時刻と終了時刻がある場合のみ、終了時刻ー開始時刻をして、
所要時間に値をセットするメソッドを例にしています。

calculateDuration.java
    protected List<String> calculateDuration(
            List<String> list) {
        list.stream()
        // 開始時刻と終了時刻両方設定されているものに絞る
        .filter(i -> !Strings.isEmpty(i.getTimeStart()) && !Strings.isEmpty(i.getTimeFin()))
         //終了時刻 - 開始時刻を引き、所要時間にセットする
        .forEach(i -> {
            String duration = Integer.toString(Integer.parseInt(i.getTimeFin()) - Integer.parseInt(i.getTimeStart()));
            i.setDuration(duration);
        });
        return list;
    }
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0