我正在尝试将几个列表合并为一个,以消除重复项。番石榴中的mergeSorted方法似乎适用于我的情况。但是当我尝试它时,我看到关于传递给该方法的参数的编译错误。我的代码就这么简单,我有两个列表,将它们合并为一个,然后尝试对它进行排序,但是在第四行出现编译错误。

    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 >可迭代对象,但方法描述似乎表明输入可以是所有给定可迭代对象的合并内容


@Beta公共静态 Iterable mergeSorted(Iterable 可迭代>迭代
比较器比较器)

返回所有给定可迭代对象的合并内容上的可迭代对象。
等效条目将不会重复数据删除。

调用者必须确保源可迭代对象不降序
order,因为此方法不对输入进行排序。

最佳答案

当前,您正在合并可迭代对象,然后再进行合并-此时,除其他任何内容外,结果不再排序!

如您所述,mergeSorted需要一个“可迭代的可迭代对象”。完整样本:

import java.util.List;
import com.google.common.base.Joiner;
import com.google.common.collect.Iterables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;

public class Test {
    public static void main(String[] args) {

        List<Integer> first  = Lists.newArrayList(1, 2, 3);
        // Note that each input list has to be sorted already!
        List<Integer> second = Lists.newArrayList(2, 4, 5, 6);
        Iterable<Integer> all = Iterables.mergeSorted(
            ImmutableList.of(first, second), Ordering.natural());
        System.out.println(Joiner.on(", ").join(all));
    }
}

09-05 16:58