【发布时间】:2020-12-08 16:19:31
【问题描述】:
我正在学习 Java 11,并想使用 Java 11 编写以下逻辑块。任何输入都会有所帮助。由于它有许多条件检查,我们可以使用 lambda 或流来实现以下逻辑块。
@Data
class MyDetails{
private String name;
private String status;
private Integer spreadValue;
private Object value;
...
}
public List<MyDetails> returnValidList(Collection<MyDetails> myDetails){
for (MyDetails myDetail : myDetails){
if (myDetail !=null && myDetail.getValue()!=null){
if (myDetail.getSpreadValue()==3 || myDetail.getSpreadValue()==4){
if (myDetail.getName().equalsIgnoreCase("AUTO") || myDetail.getName().equalsIgnoreCase("HOME")){
result.add(myDetail);
} else {
result.add(myDetail);
}
}
}
return result;
}
}
我尝试了以下代码,但列表大小为零,预期列表大小为 17。任何建议以更正以下 sn-p。
List<MyDetails> result = myDetails.stream()
.filter(Objects::nonNull)
.filter(obj -> Objects.nonNull(obj.getValue()))
.filter(obj -> obj.getSpreadValue() == 3 || obj.getSpreadValue() == 4)
.collect(Collectors.toList());
【问题讨论】:
-
提供类结构会有很大帮助。
-
编辑了帖子,它是一个普通的实用程序类。 @NikolasCharalambidis
-
我说的是
MyDetails类。实用程序类将如何帮助获得答案? -
如果你最终将
result.add(myDetail);作为两者的唯一部分,你为什么还需要最里面的if..else? -
@Naman - 是的,不需要内部 if(..) 块。我已经包含了我在上面的帖子中尝试过的代码,但列表大小是 0 而不是 17。
标签: java java-stream java-11