java - Java 列表过滤和查找第一个/查找最后一个
问题描述
我有一个 java 对象列表。对象属性为:
public class CheckPoint {
private String message;
private String tag;
}
现在,我想根据标签找到过滤器列表并获取第一个/最后一个元素。
例如:可能的标签值:A、B、C。对于值为A 的标签- 我想要最后一个元素,B - 我想要第一个元素,C - 第一个元素
当前解决方案:
CheckPoint inTransitCheckPoint = checkPointsList.stream().filter(c -> c.getTag().equals("A")).reduce((first, second) -> second).orElse(null);
CheckPoint useCheckPoint = checkPointsList.stream().filter(c -> c.getTag().equals("B")).findFirst.orElse(null);
CheckPoint typeCheckPoint = checkPointsList.stream().filter(c -> c.getTag().equals("C")).findFirst.orElse(null);
但是,我确实理解这是一个低效的解决方案,因为我们循环了三次。有人可以帮助我以更高效的方式解决它吗?
任何帮助将不胜感激,谢谢:)
解决方案
您可以先收集到Map
例如:
Map<String, List<CheckPoint>> map =
checkPointsList.stream()
.collect(Collectors.groupingBy(CheckPoint::getTag));
Optional.ofNullable(map.get("A"))
.orElse(Collection.emptyList())
.reduce((left, right) -> right)
.orElse(null);
// same for "B" and "C"
推荐阅读
- github - 为 GitHub 项目页面和用户页面使用相同的主题
- asp.net - IIS 在同一端口上处理 api 和网站
- flutter - 为什么我的复选框不起作用?即使在设置 setState 之后
- python-3.x - 如何在python中下载带有base64内容的imap电子邮件附件?
- machine-learning - 我有这个错误“输入 0 与层 lstm 不兼容预期 ndim=3 发现 ndim=5”
- ffmpeg - 为 FFMPEG 输出文件名附加 GUID
- php - 使用数组从不同的表中调用名称
- postman - 如何使用 REST API 在 keycloak 中重置用户密码
- opencv-python - 当我尝试运行以下代码打开图像时
- mpi - 使用 slurm 调度程序在多个节点上运行 MPI 作业