gpt4 book ai didi

java - Guava 合并排序问题

转载 作者:行者123 更新时间:2023-12-04 20:46:14 24 4
gpt4 key购买 nike

我正在尝试将几个列表合并为一个,以消除重复项。 Guava 中的 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 > iterables 但方法描述似乎表明输入可以是所有给定 iterables 的合并内容

@Beta public static <T> Iterable<T> mergeSorted(Iterable<? extends Iterable<? extends T>> iterables, Comparator<? super T> comparator)

Returns an iterable over the merged contents of all given iterables. Equivalent entries will not be de-duplicated.

Callers must ensure that the source iterables are in non-descending order as this method does not sort its input.

最佳答案

您当前正在合并之前将您的迭代器连接在一起——此时,结果不再排序,除了其他任何东西!

正如您所指出的,mergeSorted 需要一个“iterables of iterables”。完整示例:

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));
}
}

关于java - Guava 合并排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18349900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com