文字列の比較について
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クラスを使って宣言するには、以下のように記述します。
Map<キーの型名, 値の型名> オブジェクト名 = new HashMap<>();
putで要素を追加
以下のように記述します。
Map型オブジェクト名.put(キー, 値);
getで要素を取得
Map型オブジェクト名.get(キー);
Mapの要素をループで処理する方法
for、foreachでループ処理
Mapに登録されているデータを一括で扱う際にはループで処理するのが一般的である。
Javaにはforeachという命令はありませんが、他言語で言うところのforeachと同じ処理方法が備わっています。
それを拡張for文といいます。
以下のように記述します。
for(型 変数名 : List名){
System.out.println(変数名);
}
iteratorでループ処理
Iteratorという仕組みを使ってもループ処理を書くことができます。
以下のように記述します。
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メソッドを使用します。
以下のように記述します。
Map型オブジェクト名.keySet()
containsKeyでkeyを検索
Mapの中に特定の「キー」が含まれているかどうかは、containsKeyメソッドを使って判断します。
以下のように記述します。
Map型オブジェクト名.containsKey(検索するキー)
三項条件演算子
使い方
条件式 ? 式1 : 式2
条件式を評価し、true(真)だった場合には式 1 を、false(偽)だった場合には式 2 を返します。
なお、条件演算子の記述で気を付けなくてはならないのは、式 1 と式 2 のデータ型を同じにすることです。
条件式の結果として何かの数値なり文字なりが戻されるので、条件式の TRUE(真)と FALSE(偽)で戻るデータ型が異なると都合が悪いからです。
具体的なプログラムは、以下のようになります。
実装例
/* 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"))を設定し、
第二引数にターゲットの文字列を設定します。
実装例
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つずつ取り出し何らかの処理をする終端操作です。
使い方は以下を参考にしてください。
実装例
リストに開始時刻と終了時刻がある場合のみ、終了時刻ー開始時刻をして、
所要時間に値をセットするメソッドを例にしています。
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;
}