Java lambda 在文本框中显示

Java lambda show in textbox

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

我有一个衰减器列表,我想通过 "basic" 快速排序函数对这个列表进行排序。

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()- 函数。所以它只需要订购双精度值和 return 它们。

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

感谢您的宝贵时间!

如其所说:Double 中有两个方法具有兼容的签名,编译器不知道该选择哪个。由于它们是严格等价的,您可以选择其中一个。

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

.map(Object::toString)

强制编译器使用 "standard"、无参数、toString 方法。