2

重複を排除して、いくつかのリストを 1 つにマージしようとしています。Guava の mergeSorted メソッドが私の場合に当てはまるようです。しかし、試してみると、メソッドに渡す引数についてコンパイル エラーが発生することがわかります。私のコードはこれと同じくらい単純です。2 つのリストがあり、それらを 1 つに連結してからマージソートを試みますが、4 行目でコンパイル エラーが発生します。

    final List<Integer> first  = Lists.newArrayList(1, 2, 3);
    final List<Integer> second = Lists.newArrayList(4, 2, 5, 6);
    Iterable<Integer> some = Iterables.concat(first, second);
    final Iterable all = Iterables.<Integer>mergeSorted(some, comp);
    System.out.println(all);

mergeSorted が Iterable<? を期待しているようです。Iterable<? を拡張します。T>> iterables を拡張しますが、メソッドの説明は、入力がすべての与えられた iterables のマージされたコンテンツになる可能性があることを示唆しているようです

@Beta public static <T> Iterable<T> mergeSorted(Iterable<? extends Iterable<? extends T>> iterables, Comparator<? super T> コンパレータ)

指定されたすべての iterable のマージされたコンテンツに対する iterable を返します。同等のエントリは重複除外されません。

このメソッドは入力をソートしないため、呼び出し元はソース iterable が降順でないことを確認する必要があります。

4

1 に答える 1