Я пытаюсь передать список парных чисел в Map<Double, Double>
, где ключи являются парными в исходном списке, а значения - это некоторое вычисленное значение.Как преобразовать лямбда-параметры в используемые объекты?
Это то, что мой код выглядит следующим образом:
// "values" is a List<Double> that was passed in
ImmutableMap<Double, Double> valueMap = values.parallelStream()
.collect(Collectors.toMap(p -> p, p -> doThing(values, p)));
private Double doThing(List<Double>, Double p) {
Double computedValue = 0.0;
// Do math here with p
return computedValue;
}
Однако IntelliJ жалуется, что p -> p
не является допустимым лямбда-выражение - это жалуется циклическом умозаключений. Я также получаю сообщение об ошибке, когда я вызываю doThing
, потому что p
является параметром лямбда, а не двойным.
Когда я пытаюсь наложить p
на номер Double
, позвоните по номеру doThing
, который не отображается.
Я пропустил что-то действительно очевидное? Кажется, нет никакого способа сделать что-либо с моими параметрами лямбда ...
Вы правы насчет опечатки, извините. Изменение его на карте вместо ImmutableMap, похоже, устранило проблему. Вы знаете, почему ошибки, которые я видел, были, по-видимому, не связаны? Для такой ошибки я ожидал бы что-то вроде ошибки несоответствия типа между возвращаемым значением .collect() и объявленным типом valueMap. Почему в мире объявленное несоответствие типа вызывает циклическую ошибку вывода ...? – sichinumi
@sichinumi Я попробовал его с Eclipse и получил несоответствие _Type: невозможно преобразовать из Map
Afaik, IntelliJ использует 'javac' так же, как Netbeans, поэтому я могу подтвердить, что сообщения об ошибках, связанные с выводом Generics/Type или Lambda Expressions, могут быть запутанными и далекими от реальной проблемы. Иногда просто забытые ')', '>' или ';' могут вызывать множество абсурдных, бесполезных сообщений об ошибках. – Holger