gpt4 book ai didi

for-loop - 从 Stream 内的其他 Stream 返回值

转载 作者:行者123 更新时间:2023-12-02 22:08:45 25 4
gpt4 key购买 nike

任务

我有一个对象“Point”的列表及其过滤版本:allPoints和pointsFromStepTwo,其中stepTwo是另一种方法。我需要添加到列表中,这是我从stepTwo获得的所有Point,它们与同时应用于allPoints和pointsFromStepTwo的条件相匹配。

代码看起来像:

public List<Point> stepThree(List<Point> pointsFromStepTwo, List<Point> allPoints) {
return allPoints.stream()
.filter(point -> point.getRadius() + {pointsFromStepTwo.stream().forEach(point1 -> point1.getRadius()); > smth })
}.collect(Collectors.toList());

其中“smth”是一个特殊条件。

问题

我无法找到每次从pointsFromStepTwo 到allPoint 的点返回值的正确方法。基本上它是一个 for 循环内的一个 for 循环。我认为这会起作用:

public List<Point> stepThree(List<Point> pointsFromStepTwo, List<Point> allPoints) {
Set<Point> tmp = new HashSet<>();

for (Point point1 : allPoints) {
for (Point point2 : pointsFromStepTwo) {
if (point1.equals(point2) ||
point1.getRadius() + point2.getRadius() + getGap() + getErr() >= getL(point1, point2)) {
tmp.add(point2);
}
}
}

return new ArrayList<>(tmp);
}

其中 getL(point1, point2) 是一个特殊条件

最佳答案

使用 anyMatch 而不是 forEach:

public List<Point> stepThree(List<Point> pointsFromStepTwo, List<Point> allPoints)
{
return allPoints.stream()
.filter(point2 -> pointsFromStepTwo.stream()
.anyMatch(point1 -> point1.getRadius() + point2.getRadius() >= getL(point1, point2)))
.collect(Collectors.toList());
}

编辑:看起来您希望输出List包含pointsFromStepTwo的所有点。如果你不关心顺序,那么(假设pointsFromStepTwo的所有点都属于`allPoints),你可以在过滤器中添加一个条件:

public List<Point> stepThree(List<Point> pointsFromStepTwo, List<Point> allPoints)
{
return allPoints.stream()
.filter(point2 -> pointsFromStepTwo.stream()
.anyMatch(point1 -> point2.equals(point1) || (point1.getRadius() + point2.getRadius() >= getL(point1, point2))))
.collect(Collectors.toList());
}

关于for-loop - 从 Stream 内的其他 Stream 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50943061/

25 4 0