Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

214
Vistas
¿Por qué el uso de una referencia de método en lugar de un lamda da como resultado un error de compilación en este caso?

Tengo el siguiente código:

 final var fieldValuesStream = items.stream() .map(person -> PersonFieldGetter.getFieldValueAsNumber(functionsParameters.getFieldName(), person)) // Number .mapToDouble(number -> number.doubleValue());

IDEA resalta "número -> número.doubleValue()" con el mensaje:

Lambda se puede reemplazar con la referencia del método
Reemplace Lamda con la referencia del método

Pero cuando cambio el código a .mapToDouble(Number::doubleValue) ocurre un error de compilación:

QueryProcessor.java:31:34 java: tipos incompatibles: método de referencia de método no válido doubleValue en la clase java.lang.Number no se puede aplicar a los tipos dados requerido: no se encontraron argumentos: java.lang.Object razón: las listas de argumentos reales y formales difieren en largo

código fuente completo
¿Por qué está pasando esto?

Proyecto para reproducir el problema

EDITAR: Se agregó un enlace al proyecto de GitHub con un proyecto de ejemplo que no se puede compilar usando:

IntelliJ IDEA 2021.2.3 (última edición)
Compilación n.º IU-212.5457.46, compilada el 12 de octubre de 2021
Versión de tiempo de ejecución: 11.0.12+7-b1504.40 amd64
Máquina virtual: máquina virtual de servidor OpenJDK de 64 bits de JetBrains sro
SDK: Oracle OpenJDK 17.0.1

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No es una respuesta, con el objetivo de proporcionar un ejemplo reproducible simplificado para que otros resuelvan el problema.

 import java.util.List; public class Main { public static void main(String[] args) { List.of(0.1d).stream().map(aDouble -> { return List.of(1).stream().map(p -> aDouble).mapToDouble(Number::doubleValue); } ); } }

Parece que el problema es que el compilador no puede reconocer el tipo de aDouble en el flujo anidado y causa un error extraño.

Alguna forma de hacer que se compile

  1. Quitar devolución
 Stream.of(0.1d).map(aDouble -> List.of(1).stream().map(p -> aDouble).mapToDouble(Double::doubleValue) );
  1. Especifique el tipo de aDouble
 Stream.of(0.1d).map((Double aDouble) -> { return List.of(1).stream().map(p -> aDouble).mapToDouble(Double::doubleValue); } );
  1. No usar referencia de método
 Stream.of(0.1d).map(aDouble -> { return List.of(1).stream().map(p -> aDouble).mapToDouble(d -> d.doubleValue()); } );
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda