Guavaの21.0がいつの間にかリリースされてました。
Release21 · google/guava Wiki · GitHub
今回からJava8必須になったようです。
色々変更があったようなので簡単に(ごく一部を)試してみます。
準備
pom.xmlに以下を追記します
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>21.0</version> </dependency>
com.google.common.base.Optional
Java標準のOptional(java.util.Optional)との相互変換ができるようになっています。
Optional#toJavaUtil
: GuavaのOptional -> java.util.Optional の変換を行います。Optional#fromJavaUtil
: java.util.Optional -> GuavaのOptional の変換を行います。
■サンプルコード
import com.google.common.base.Optional; Optional guavaOpt1 = Optional.of("Some"); // Guava -> Java java.util.Optional javaOpt = guavaOpt1.toJavaUtil(); // Java -> Guava Optional guavaOpt2 = Optional.fromJavaUtil(javaOpt);
com.google.common.collect.Multimap
Multimap
にforEachメソッドがいくつか追加されています
Multimap#foreach
: Multimap内の(重複keyも含めた)全要素に対する処理を行うことができます。(引数にはkeyとvalueが渡されます)
■サンプルコード
import com.google.common.collect.Multimap; import com.google.common.collect.ArrayListMultimap; Multimap<String, String> multiMap = ArrayListMultimap.create(); multiMap.put("key1", "value1"); multiMap.put("key1", "value2"); multiMap.put("key1", "value3"); multiMap.put("key2", "data1"); multiMap.put("key3", "Taro"); // 引数にはkeyとvalueが渡される System.out.println("## Multimap#foreach"); multiMap.forEach((k, v) -> System.out.println(k + ": " + v));
■実行結果
## Multimap#foreach key1: value1 key1: value2 key1: value3 key2: data1 key3: Taro
com.google.common.collect.Multiset
Multiset
にメソッドがいくつか追加されています
Multiset#foreach
: Multiset内の(重複要素も含めた)全要素に対する処理を行うことができます。Multiset#forEachEntry
: Multiset内の各エントリに対する処理を行うことができます。エントリとして要素とその保持数が引数に渡されますMultiset#size
: Multiset内の(重複要素も含めた)全要素を取得することができます。
■サンプルコード
import com.google.common.collect.Multiset; import com.google.common.collect.HashMultiset; import com.google.common.collect.Lists; List<String> words = Lists.newArrayList("hello", "dog", "cat", "red", "hello", "hello", "dog", "blue", "blue"); Multiset<String> wordMultiSet = HashMultiset.create(words); System.out.println("## Multiset#foreach"); wordMultiSet.forEach(e -> System.out.println(e)); System.out.println("\n"); System.out.println("## Multiset#forEachEntry"); wordMultiSet.forEachEntry((e, count) -> System.out.println(e + ":" + count)); System.out.println("\n"); System.out.println("## Multiset#size"); System.out.println("size : " + wordMultiSet.size());
■実行結果
## Multiset#foreach red blue blue cat hello hello hello dog dog ## Multiset#forEachEntry red:1 blue:2 cat:1 hello:3 dog:2 ## Multiset#size size : 9
com.google.common.collect.Streams
新しく追加されたクラスです、Stream APIにはない補助的なメソッドを提供してくれています
Streams#zip
: 指定された2つのStream内の要素同士を合成することができます。Streams#concat
: 指定された複数のStreamを結合したStreamを返します。Streams#findLast
: Streamの内の最終要素をjava.util.Optionalで返します。
■サンプルコード
import com.google.common.collect.Streams; List<Integer> list1 = Arrays.asList(0, 1, 2, 3, 4, 5); List<Integer> list2 = Arrays.asList(12, 13, 14, 15, 16, 17); List<Integer> zippedList = Streams.zip(list1.stream(), list2.stream(), (i1, i2) -> i1 + i2) .collect(Collectors.toList()); System.out.println("Streams#zip List: " + zippedList); List<Integer> concatList = Streams.concat(list2.stream(), list1.stream()) .collect(Collectors.toList()); System.out.println("Streams#concat List: " + concatList); java.util.Optional<Integer> last = Streams.findLast(list1.stream()); last.ifPresent(val -> System.out.println("list1 last -> " +val));
■実行結果
Streams#zip List: [12, 14, 16, 18, 20, 22] Streams#concat List: [12, 13, 14, 15, 16, 17, 0, 1, 2, 3, 4, 5] list1 last -> 5