
オブジェクトを文字列へ変換(Apache Commons Lang)
String str1 = new ReflectionToStringBuilder(this).toString(); String str2 = ToStringBuilder.reflectionToString(this);
コレクションの全要素をそれぞれ処理する。
Java1.4の場合は、イテレータを使用する。
Iterator ite = list.iterator();
while (ite.hasNext()) {
String str = (String) ite.next();
System.out.println(str);
}
Java5の場合は、拡張for文が使える。
for (String e : list) {
System.out.println(e);
}
Java8の場合は、ラムダ式が使える。
// ラムダ式
list.forEach((str) -> {
System.out.println(str);
});
// ラムダ式にメソッド参照を渡す。
list.forEach(System.out::println);
String→InputStream変換
InputStream is = new ByteArrayInputStream("Hello".getBytes("UTF-8"));
実行中のメソッド名は、次のようにして取得できる。ただし、パフォーマンス悪いので注意。
String methodName = new Throwable().getStackTrace()[0].getMethodName();
ユーティリティメソッド化するなら、次のように書ける。
public class AppUtil {
/**
* 現在メソッド名を取得する。
*/
public static String getMethod() {
return new Throwable().getStackTrace()[1].getMethodName();
}
}
Java8からラムダ式が導入されました。これにより、今まで関数型インタフェースなどで記述していたメソッド引数が書きやすくなりました。
次のようなメソッドがあったとします。
// 呼び出し対象メソッド
private static void runLambda(FuncInterface action) {
action.run("Hello World");
}
// 独自の関数型インタフェース
private interface FuncInterface {
public void run(String msg);
}
上記メソッドを呼び出すとき、Java7までは、次のように書きました。
runLambda(new FuncInterface() {
@Override
public void run(String msg) {
System.out.println(msg);
}
});
Java8からは次のように書けるようになります。
runLambda((msg) -> {
System.out.println(msg);
});
上記では関数型インタフェースを独自に定義しましたが、Java8では、いくつかの関数型インタフェースがあらかじめ用意されるようになりました。詳細は、下記リンクを参照。
Java8からストリームAPIが導入された。これにより、コレクションが操作しやすくなり、並列処理のパフォーマンス向上が期待できるらしい。 入出力ストリームとは無関係。
たとえば、今まで、次のように記述していたのが、
long count = 0;
for (String e : list) {
if (e.length() > 4) {
count++;
}
}
System.out.println(count);
Java8からは、次のように書ける。
long count = list.stream().filter(w -> w.length() > 4).count(); System.out.println(count);
[PageInfo]
LastUpdate: 2016-06-16 21:55:07, ModifiedBy: kurukuru-papa
[Permissions]
view:all, edit:admins, delete/config:admins