FluentIterable から Stream に書き換えたら toSet で嵌った話

2018-03-09 Fri 11:15:34 JST
posted by hadrori

環境

JDK 8u102

問題

Intellij IDEA の仰るとおりに FluentIterable を Stream に書き換えていたら,set 周りの unit test が落ちるようになった.

原因

FluentIterable::toSet は ImmutableSet を,Collectors.toSet() は HashSet を返していたため,equals の評価方法が違った.
ImmutableSet は hashCode() を無視するが,HashSet は無視しない.

解決方法

Set に入れるクラスに hashCode() を実装する.