【发布时间】:2021-10-29 14:02:52
【问题描述】:
我有一个对象
public class QuestionDetails {
private List<SubQuestion> subQuestions;
private Long questionId;
}
我将 SubQuestion 声明为
public class SubQuestion{
private List<SubQuestion> childQuestions;
private Long questionId;
}
我从用户那里获取问题 ID 作为“questionId”,从 DB 获取 QuestionDetails 对象。
逻辑
我想将用户的 questionId 与 subQuestions 列表中的 questionId 进行比较,以获取 subQuestions 对象,如果我没有找到任何匹配项,那么我想去同一个 subQuestions 对象中的 childQuestions 以查看 childQuestions 列表是否有任何匹配项。如何我可以在java8中做到这一点吗? 现在我正在做的是,我首先检查所有子问题,如果我没有找到任何匹配项,那么我正在调查所有子问题。我的代码在下面
Long questionId = dto.getQuestions().get(0).getQuestionId ();
subQuestion= questionDetails.getSubQuestions().stream()
.filter(sub -> (new Long(sub.getQuestionId()).equals(new Long(questionId))))
.findAny() .orElse(questionDetailsDTO.getSubQuestions().stream()
.flatMap(sub -> sub.getChildQuestions().stream())
.filter(child -> (new Long(child.getQuestionId()).equals(newLong(questionId))))
.findFirst()
.orElse(null));
【问题讨论】:
-
你为什么要
new Long()? -
我正在使用 new Long() 以便我可以使用 equals() 方法进行比较
-
原始比较有什么问题?
-
“我还没试过”——所以你开始是用一个不必要的复杂表达式而不是一个直截了当的表达式?考虑到值 are 在您使用
new Long(…)之前已经是Long类型,这就更奇怪了,这会将它们拆箱到long,再次将它们装箱到Long。顺便说一下,newLong(questionId)处缺少一个空格。此外,你没有问任何问题。 -
所以你的问题是?简化这段代码还是别的什么?