gpt4 book ai didi

java - 为什么java lambda会跳转过滤器

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

我有以下代码:

public List<MainObject> filterListByNestedObjectAttribute(List<MainObject> mainObjects) {
List<MainObject> mainObjectFiltered = mainObjects.stream()
.filter(mainObject -> {
NestedObject nestedObject = Collections.max(mainObject.getNestedObjects(), Comparator.comparing(nestedObject -> nestedObject.getDate()));
return businessValidation(nestedObject) || businessValidation2(nestedObject);
})
.collect(Collectors.toList());
}

重点是,过滤器永远不会被调用......无论我做什么,过滤器都会被忽略,流的结果是相同列表!!

我做错了什么吗?对另一个 Java lambda 的调用会破坏过滤器调用吗?

<小时/>

编辑

我在 void main 中应用了相同的代码并工作了......

在单元测试中,IDE 正在缓存过滤器的值,我不知道为什么......

代码:

public class LambdaJumpsFilter {

public static void main(String[] args) {
LambdaJumpsFilter lambdaJumpsFilter = new LambdaJumpsFilter();

NestedObject nestedA1 = lambdaJumpsFilter.new NestedObject("A", OffsetDateTime.now().plusDays(3));
NestedObject nestedB1 = lambdaJumpsFilter.new NestedObject("B", OffsetDateTime.now().plusDays(2));
NestedObject nestedC1 = lambdaJumpsFilter.new NestedObject("C", OffsetDateTime.now().plusDays(1));
NestedObject nestedA2 = lambdaJumpsFilter.new NestedObject("A", OffsetDateTime.now().plusDays(1));
NestedObject nestedB2 = lambdaJumpsFilter.new NestedObject("B", OffsetDateTime.now().plusDays(2));
NestedObject nestedC2 = lambdaJumpsFilter.new NestedObject("C", OffsetDateTime.now().plusDays(3));

MainObject mainObject1 = lambdaJumpsFilter.new MainObject();
MainObject mainObject2 = lambdaJumpsFilter.new MainObject();

List<NestedObject> nestedObjects1 = new ArrayList<>();
nestedObjects1.add(nestedA1);
nestedObjects1.add(nestedB1);
nestedObjects1.add(nestedC1);

List<NestedObject> nestedObjects2 = new ArrayList<>();
nestedObjects2.add(nestedA2);
nestedObjects2.add(nestedB2);
nestedObjects2.add(nestedC2);

mainObject1.setNestedObjects(nestedObjects1);
mainObject2.setNestedObjects(nestedObjects2);

List<MainObject> mainObjects = new ArrayList<>();
mainObjects.add(mainObject1);
mainObjects.add(mainObject2);

List<MainObject> mainObjectFiltered = mainObjects.stream()
.filter(mainObject -> {
NestedObject nestedObjectMax = Collections.max(mainObject.getNestedObjects(), Comparator.comparing(nestedObject -> nestedObject.getDateTime()));
return lambdaJumpsFilter.businessValidation(nestedObjectMax) || lambdaJumpsFilter.businessValidation2(nestedObjectMax);
})
.collect(Collectors.toList());

System.out.println(mainObjectFiltered.size());
}

private boolean businessValidation2(NestedObject nestedObject) {
return nestedObject.equals("D");
}

public boolean businessValidation(NestedObject nestedObject){
return nestedObject.value.equals("A");
}

public class MainObject{
private List<NestedObject> nestedObjects;


public List<NestedObject> getNestedObjects() {
return nestedObjects;
}

public void setNestedObjects(List<NestedObject> nestedObjects) {
this.nestedObjects = nestedObjects;
}
}

public class NestedObject {
private String value;
private OffsetDateTime dateTime;

public NestedObject(String value, OffsetDateTime dateTime) {
this.value = value;
this.dateTime = dateTime;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public OffsetDateTime getDateTime() {
return dateTime;
}

public void setDateTime(OffsetDateTime dateTime) {
this.dateTime = dateTime;
}
}

}
<小时/>

我知道那是绝望,但我花了几个小时寻找类似的东西。

我发现为什么 DEBYG 没有在过滤器中传递...

当我进行单元测试时,我花费了相同的值,并且(我不知道为什么)IDE 已经知道过滤器的值并最终忽略过滤器。

最佳答案

说实话,我不相信过滤器被跳过。对我来说,您的过滤器逻辑是错误的,并且为所有元素返回 true (假设这不是您所期望的),或者您只认为应该跳过某些元素,而事实并非如此。

试试这个

List<MainObject> mainObjectFiltered = mainObjects.stream()
.filter(mainObject -> {
NestedObject nestedObject = Collections.max(mainObject.getNestedObjects(), Comparator.comparing(nestedObject -> nestedObject.getDate()));
boolean result=businessValidation(nestedObject) || businessValidation2(nestedObject);
System.out.println("Im am indeed filtering: "+result);
return result;
})
.collect(Collectors.toList());

并告诉我控制台上没有输出:)

可以跳过过滤器的唯一情况是流为空,但据我从您的描述中可以看出,情况并非如此

关于java - 为什么java lambda会跳转过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49831178/

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