我有一个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);
然而,我明白这种解决方案并不高效,因为我们要进行三次循环。有没有人能帮助我以更高效的方式解决它呢?
非常感谢任何帮助 :)
checkPointsList
有多大?你是否遇到了任何实际的性能问题? - Thomasfor
循环而不是流,因为单个流的开销远远超过 3 个for
循环的性能,更不用说一个单独的for
循环收集所有 3 个结果了。简而言之,“低效的解决方案”是不正确的,你应该继续使用对你来说最合理的代码,直到代码剖析显示你实际上有问题。 - Andreas