1前書き

このクックブックの記事は、Guavaスタイルのコレクションを使用するための

小さくて焦点を絞ったレシピとコードスニペット

にまとめられています。

そのフォーマットは、追加の説明を必要としない、増え続けるコード例のリストです。それは、開発中にAPIの一般的な用途に簡単にアクセスできるようにするためのものです。


2レシピ


  • note

    :これはJavaにおける非共変の一般化コレクションに対する回避策です



class CastFunction<F, T extends F> implements Function<F, T> {
    @Override
    public final T apply(final F from) {
        return (T) from;
    }
}
List<TypeParent> originalList = Lists.newArrayList();
List<TypeChild> theList = Lists.transform(originalList,
    new CastFunction<TypeParent, TypeChild>());

  • Guavaなしのより単純な代替案 – 2つのキャスト操作を含む**

List<Number> originalList = Lists.newArrayList();
List<Integer> theList = (List<Integer>) (List<? extends Number>) originalList;

Iterable<String> iter = Lists.newArrayList();
Collection<String> collector = Lists.newArrayList();
Iterables.addAll(collector, iter);

**

**

Iterable<String> theCollection = Lists.newArrayList("a", "bc", "def");
    boolean contains = Iterables.any(theCollection, new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
        return input.length() == 1;
    }
});
assertTrue(contains);

検索を使用した代替ソリューション

Iterable<String> theCollection = Sets.newHashSet("a", "bc", "def");
boolean contains = Iterables.find(theCollection, new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
       return input.length() == 1;
    }
}) != null;
assertTrue(contains);

  • セットにのみ適用可能な代替ソリューション**

Set<String> theCollection = Sets.newHashSet("a", "bc", "def");
boolean contains = !Sets.filter(theCollection, new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
        return input.length() == 1;
    }
}).isEmpty();
assertTrue(contains);

Iterable<String> theCollection = Sets.newHashSet("abcd", "efgh", "ijkl");
Predicate<String> inputOfLengthOne = new Predicate<String>() {
    @Override
    public boolean apply(final String input) {
        return input.length() == 1;
    }
};
String found = Iterables.find(theCollection, inputOfLengthOne);

  • これは


    NoSuchElementException

    例外

    をスローします。

java.util.NoSuchElementException
    at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:154)
    at com.google.common.collect.Iterators.find(Iterators.java:712)
    at com.google.common.collect.Iterables.find(Iterables.java:643)


  • 解決策

    :デフォルトの戻り値を引数とするオーバーロードされた

    find

    メソッド** があり、目的の動作のために

    null

    を指定して呼び出すことができます。

String found = Iterables.find(theCollection, inputOfLengthOne, null);

List<String> values = Lists.newArrayList("a", null, "b", "c");
Iterable<String> withoutNulls = Iterables.filter(values, Predicates.notNull());

ImmutableList<String> immutableList = ImmutableList.of("a", "b", "c");
ImmutableSet<String> immutableSet = ImmutableSet.of("a", "b", "c");
ImmutableMap<String, String> imuttableMap =
    ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3");

List<String> muttableList = Lists.newArrayList();
ImmutableList<String> immutableList = ImmutableList.copyOf(muttableList);

Set<String> muttableSet = Sets.newHashSet();
ImmutableSet<String> immutableSet = ImmutableSet.copyOf(muttableSet);

Map<String, String> muttableMap = Maps.newHashMap();
ImmutableMap<String, String> imuttableMap = ImmutableMap.copyOf(muttableMap);

  • ビルダーを使用した代替ソリューション**

List<String> muttableList = Lists.newArrayList();
ImmutableList<String> immutableList =
    ImmutableList.<String> builder().addAll(muttableList).build();

Set<String> muttableSet = Sets.newHashSet();
ImmutableSet<String> immutableSet =
    ImmutableSet.<String> builder().addAll(muttableSet).build();

Map<String, String> muttableMap = Maps.newHashMap();
ImmutableMap<String, String> imuttableMap =
    ImmutableMap.<String, String> builder().putAll(muttableMap).build();


3その他のグアバ料理書

Guavaは、包括的で非常に便利なライブラリです。ここに、クックブック形式でカバーされるAPIがいくつかあります。

楽しい。


4今後

冒頭で述べたように、私はこの

異なるフォーマット – 料理本

– を試して、単一の場所でGuavaコレクションを使用する簡単な一般的なタスクを集めることを試みています。このフォーマットの焦点は単純さとスピードです、それでほとんどのレシピは

コード例それ自身

以外に追加の説明がありません** 。

最後に – 私はこれを

生きている文書

として見ています – 私はそれらに遭遇するにつれて私はレシピと例を追加し続けるつもりです。コメントにもっと自由にご記入ください。私はそれらをクックブックに取り入れたいと思います。

これらすべての例とコードスニペットの実装

はhttps://github.com/eugenp/tutorials/tree/master/guava-collections[GitHubでの使用]

– これはMavenベースのプロジェクトです。そのままインポートして実行するのは簡単です。