java - Java 8 比较器不工作
问题描述
我有一个基本的 SpringBoot 应用程序。使用 Spring Initializer、JPA、嵌入式 Tomcat、Thymeleaf 模板引擎和打包为可执行 JAR 文件我有这段代码来比较 POJO,但比较器似乎不起作用,因为 lastDeviceEvent 和 firstDeviceEvent 是具有相同 ID 的同一个对象
DeviceEvent lastDeviceEvent = null;
DeviceEvent firstDeviceEvent = null;
try {
lastDeviceEvent = deviceEvents
.stream()
.filter (o -> o.getId().equals(deviceId))
.sorted(comparing((DeviceEvent de) -> de.getId()).reversed())
.findFirst().get();
firstDeviceEvent = deviceEvents
.stream()
.filter (o -> o.getId().equals(deviceId))
.sorted(comparing((DeviceEvent de) -> de.getId()))
.findFirst().get();
LOG.info("lastDeviceEvent --> " + lastDeviceEvent.getId());
LOG.info("firstDeviceEvent -> " + firstDeviceEvent.getId());
} catch (NoSuchElementException nse) {
throw new AccessDeniedException("403 Forbidden");
}
解决方案
比较器似乎是正确的。问题似乎出在您的过滤器子句中,您将事件 ID与设备 ID进行比较
lastDeviceEvent = deviceEvents
.stream()
.filter (o -> o.getDeviceId().equals(deviceId)) // Original code used getId()
.sorted(comparing((DeviceEvent de) -> de.getId()).reversed())
.findFirst()
.get();
推荐阅读
- javascript - 如何将 async..await 编译为 es5?
- php - 来自 Laravel 在 Amazon AWS 上的 Selenium 测试
- javascript - 如何调整 vue.js 中输入和图标的样式?
- css - css 选择器在使用 boostrap 时不起作用
- python - 如果在另一个数据框中确实存在,则删除行 - python pandas
- javascript - jquery向上滚动按钮没有出现在页面上
- javascript - 重构此函数以在 if 语句 Javascript 内部和外部一致地使用“return”
- java - Java 发送到 EventHub(未正常关闭)
- python - python每隔x个字符拆分字符串,但空格除外
- python - 我无法使用 `pip install mysqlclient` 命令安装 mysqlclient