gpt4 book ai didi

java - 使用 Java8 流在 Java 集合中查找给定值最接近的对象

转载 作者:行者123 更新时间:2023-12-02 02:47:35 28 4
gpt4 key购买 nike

我想从给定时间戳值的集合中查找匹配或最接近的条目。

我的集合是对象列表..其中包含名称id时间戳等..

String id;
long timestamp;

我想首先匹配 Id(可以有多个),然后找到给定时间戳的匹配项或从集合中返回最接近它的匹配项。我该怎么做?

myList.stream().filter(p -> p.getId().equals(Id))
.min((f1,f2) -> Math.abs(f1.getTS() - timestamp) - Math.abs(f2.getTS() - timestamp))
.findfirst().get();

它也存在 long 到 int 转换的问题。

error : type mismatch - cannot convert from long to int.

最佳答案

您混淆的是两件事,一是比较器返回类型不匹配,从您得到的错误中可以明显看出。当您比较两个 Long 时可以解决这个问题值而不是执行减法( - )进行比较。

.min((f1,f2) -> Long.compare(Math.abs(f1.getTS() - timestamp), Math.abs(f2.getTS() - timestamp)))

然后可以进一步简化为

.min(Comparator.comparingLong(f -> Math.abs(f.getTS() - timestamp)))

另一个方面是 findFirst 的混淆。与 minmin本身返回 Optional<T>作为流的最小元素。因此,您的解决方案可以通过以下方式修复:

YourClass closest = myList.stream().filter(p -> p.getId().equals(id))
.min(Comparator.comparingLong(f -> Math.abs(f.getTS() - timestamp)))
.orElse... // throw exception or choose default value

关于java - 使用 Java8 流在 Java 集合中查找给定值最接近的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62559012/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com