Functions
のようなグアバがありFunction<String,Set<String>>
ます。それらを使用すると にFluentIterable.transform()
つながりますがFluentIterable<Set<String>>
、 が必要FluentIterable<String>
です。したがって、私の考えは、サブクラスFluentIterable<E>
化して新しいメソッドを追加し、transform2()
それを返す前にすべてを 1 つのコレクションに単純にマージすることです。
元の変換メソッドは次のようになります。
public final <T> FluentIterable<T> transform(Function<? super E, T> function) {
return from(Iterables.transform(iterable, function));
}
transform2()
サブクラスとメソッドについて、次のようなことを考えました。
public abstract class FluentIterable2<E> extends FluentIterable<E>
{
public final <T> FluentIterable<T> transform2(Function<? super E, Collection<T>> function) {
// (PROBLEM 1) Eclipse complains: The field FluentIterable<E>.iterable is not visible
Iterable<Collection<T>> iterables = Iterables.transform(iterable, function);
// (PROBLEM 2) Collection<T> merged = new Collection<T>(); // I need a container / collection - which one?
for(Collection<T> iterable : iterables)
{
// merged.addAll(iterable);
}
// return from(merged);
}
}
現在、新しいサブクラスには 2 つの問題がPROBLEM 1
あります。PROBLEM 2
問題 1: 元の FluentIterable クラスの iterable フィールドはプライベートです。これについて何ができますか? サブクラスに同じ名前の新しいプライベート フィールドを作成できますか? このフィールドを使用する super.someMethod() を呼び出すサブクラスのメソッドはどうですか? その後、おそらく異なる値を持つスーパークラスのフィールドを使用するでしょうか?
問題 2: 複数のコレクションのコンテンツを結合できるジェネリック コレクションが必要ですが、コレクションはインターフェイスであるため、インスタンス化できません。それで、そこでどのクラスを使用できますか?
ソリューションがセットでのみ機能する場合は許容されますが、セットとリストで機能するソリューションが望ましいです。
これに関するヒントをありがとう!