このエントリーをはてなブックマークに追加

リリースノート

更新に関してのメモ

追記

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()

関連

issue一覧

感想

基本的にGWTでプログラムすることが多いので、まったく使わないクラスとかよくわからなかったりします。

これまでFunctionのペアでやっていたものを、Converterとしてまとめたいと思います。

単純にFunctionで変換できない複数行に係る処理はCharSource.readLines(LineProcessor)を使ってみようと思いました。