Java中Comparator.thenComparing提示参数Comparator<DTO>不适用报错求助
问题根因
第一个Comparator.comparing传入的lambda参数未声明显式类型,Java编译器无法自动推断出参数为CognodataEstadoSolicitudesDTO类型,导致第一个比较器被错误推断为Comparator<Object>,泛型不匹配导致thenComparing传入指定类型的比较器时报错。
解决方案
给lambda参数加上显式的类型声明即可修复问题,修正后代码如下:
List<CognodataEstadoSolicitudesDTO> solicitudes; // 其他逻辑省略 else if ("columnaFechaSolicitud".equals(orderBy)) { solicitudes = solicitudes.stream().sorted(Comparator.comparing((CognodataEstadoSolicitudesDTO t) -> { Date fecha = null; try { fecha = t.getFechaSolicitudToDate(); } catch (ParseException e) { LOG.error(e.getMessage()); } return fecha; }).thenComparing(Comparator.comparing(CognodataEstadoSolicitudesDTO::getIdSolicitud))).collect(Collectors.toList()); }
优化建议
如果getFechaSolicitudToDate()解析异常会返回null,直接排序可能触发空指针异常,建议在构造第一个比较器时补充空值处理逻辑:
Comparator.comparing((CognodataEstadoSolicitudesDTO t) -> { // 原有逻辑不变 }, Comparator.nullsFirst(Date::compareTo))
内容的提问来源于stack exchange,提问作者okjfokjrf
相关产品推荐
相关产品推荐

