Guava1.6 リリース情報
更新に関してのメモ
追記
1.6.1
が出ました。
修正内容
https://code.google.com/p/guava-libraries/issues/detail?id=1639 https://code.google.com/p/guava-libraries/issues/detail?id=1606
追加API
common.base
Ascii.equalsIgnoreCase
大文字小文字を無視して文字列の比較。速いらしい
1万回実行時の速度比較
string2.toLowerCase().equals(string1) | 20ms |
---|---|
string1.equalsIgnoreCase(string2) | 10ms |
Ascii.equalsIgnoreCase(string2,string1) | 5ms |
これまで、toLowerCase()を使っていたけど、遅いなあ。
Ascii文字列に限れば、toLowerCase()とかと動作同じだし、これからは使ってみよう
Ascii.truncate
長い文字列を切り詰める。
String result=Ascii.truncate("Guavaについての考察", 10, "...");
assertEquals("Guavaにつ...", result);
最大文字数には、置き換え文字の長さも含まれる。
HTMLのテーブル表記とかで綺麗に見せたいときに使えそうだな。
ソースコード読むと、文字列の結合はStringBuilderを使わないとね、あらためて思った。
Converter
新たに追加されたクラス Functionと似てるが相互変換可能なタイプ 基本的にはFunctionを実装してるのだけど
public class SplitLineByCommasConverter extends Converter<String,List<String>>{
@Override
protected List<String> doForward(String a) {
return Lists.newArrayList(Splitter.on(',').split(a));
}
@Override
protected String doBackward(List<String> b) {
return Joiner.on(',').join(b);
}
}
逆の変換は、reverse()で取り出して行う
applyに@deprecatedがついてるのが気になるけど、
FluentIterableの中で使うにはapplyいるよね。
CaseFormat.converterTo(CaseFormat)
Enums.stringConverter
Utf8
UTF8文字列のbyteを検証したり、長さを取り出すことが可能
encodedLengthは速いけど使い道は今のところ思い当たらない。
私のコードだと最終的にbyte[]が必要になることが大半
Storageに入れた文字数を正確に数えるのに使えるかも
common.collect
MultimapBuilder
マルチマップを作るためのビルダークラス
これで、ややこしい、各種クラス名を覚えなくて済むようになる。
Maps.asConverter(BiMap)
Bimapの中身を変換できるConverterが返ってくる。
common.eventbus
SubscriberExceptionHandler
common.hash
HashingInputStream
HashingOutputStream
common.io
ByteSource.read(ByteProcessor)
CharSource.readLines(LineProcessor)
行ごとに、LineProcessorで処理ができる。Functionで処理できない行をまたぐ処理があるときに便利
ちなみに、似たメソッドのreadLines()は中で、ImmutableListにコピーしているので遅い
List<String> result = Lists.newArrayList();
String line;
while ((line = reader.readLine()) != null) {
result.add(line);
}
return ImmutableList.copyOf(result);
common.primitives
Booleans.countTrue(boolean...)
stringConverter() for Ints, Longs, Doubles, Floats and Shorts
文字列を各種タイプを変換するConverterを取り出せる。
中ではdecodeかvalueOfを呼び出すだけで、NumberFormatExceptionも普通に発生する
common.reflect
ClassPath.getAllClasses()
common.util.concurrent
Runnables.doNothing()
関連
感想
基本的にGWTでプログラムすることが多いので、まったく使わないクラスとかよくわからなかったりします。
これまでFunctionのペアでやっていたものを、Converter
としてまとめたいと思います。
単純にFunctionで変換できない複数行に係る処理はCharSource.readLines(LineProcessor)
を使ってみようと思いました。