Java8 の Developer preview が公開されたので、そろそろ新機能についてまとめておきます。
の3回目は StringJoiner。
blog1.mammb.com
文字列整形のループ処理が不要になった
Scala で言う mkString、Guava で言う Joiner でしょうか。
StringJoiner にてよくある文字列連結が簡素に表現できるようになりました。
プレフィックスとサフィックスならびに区切り文字を指定して文字列の整形ができます。
StringJoiner sj = new StringJoiner(":", "[", "]"); sj.add("George").add("Sally").add("Fred"); System.out.println(sj.toString()); // [George:Sally:Fred]
Stream の collect で連結
Collectors にある joining でカンマ区切りなどできる。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4); String commaSeparated = numbers.stream() .map(i -> i.toString()) .collect(Collectors.joining(", ")); System.out.println(commaSeparated); // 1, 2, 3, 4
こっちの方が読みやすいかもしれません。
numbers.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
String の joinで文字連結
第一引数にデリミタで、可変長引数の文字を連結できます。
String message = String.join("-", "Java", "is", "cool"); System.out.println(message); // Java-is-cool
実際 join の内部では StringJoiner を使っています。
public static String join(CharSequence delimiter, CharSequence... elements) { Objects.requireNonNull(delimiter); Objects.requireNonNull(elements); // Number of elements not likely worth Arrays.stream overhead. StringJoiner joiner = new StringJoiner(delimiter); for (CharSequence cs: elements) { joiner.add(cs); } return joiner.toString(); }
短いですが、今回はここまで。