Java lambda在文本框中显示

时间:2016-02-04 09:31:39

标签: java sorting lambda textbox java-stream

我在文本框中显示列表时遇到问题。我收到错误,我不知道如何解决这个问题。

我有一个衰减器列表,这个列表我想通过“基本”quicksort函数来命令。

public static <T> List<T> Quicksort(List<T> v, BiFunction<T, T, Integer> comparer)
{
    if (v.size() < 2)
        return v;

    T pivot = v.get(v.size() / 2);

    List<T> l = new LinkedList<T>(Quicksort(v.stream().filter(x -> comparer.apply(x, pivot) < 0).collect(Collectors.toList()), comparer));
    l.addAll( v.stream().filter(x -> comparer.apply(x, pivot) == 0).collect(Collectors.toList()) );
    l.addAll( Quicksort(v.stream().filter(x -> comparer.apply(x, pivot) > 0).collect(Collectors.toList()), comparer) );

    return l;
}

要使用此功能,我在列表中使用.map() - 函数。所以它只需要对double值进行排序并返回它们。

List <Double> orderdList = Quicksort(nodigeAttenuators.stream().map(Attenuator::getVerzwakking).collect(Collectors.toList()), null);

txtAttenuatorsFull.setText(orderdList.stream().map(Double::toString).reduce((acc, item) -> acc + " \n" + item).get());

我想在文本框中显示这个双打列表以及它出错的地方。我得到了这个奇怪的错误。

txtAttenuatorsFull.setText(orderdList.stream().map(Double::toString).reduce((acc, item) -> acc + " \n" + item).get());
    (argument mismatch; invalid method reference
      reference to toString is ambiguous
        both method toString(double) in Double and method toString() in Double match)
  where R,T are type-variables:
    R extends Object declared in method <R>map(Function<? super T,? extends R>)
    T extends Object declared in interface Stream

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

正如它所说:Double中有两种方法具有兼容的签名,编译器不知道选择哪种方法。由于它们完全相同,因此您可以选择其中之一。

例如,您可以将map(Double::toString)替换为:

.map(Object::toString)

强制编译器使用&#34;标准&#34;,no-arg,toString方法。