在下面的代码中,我需要根据名为' CaseExternalStatusL1'的1个属性过滤列表。因为我不想编写不必要的代码,所以我尝试使用Java 8流并使用Lambda表达式进行过滤。当我尝试运行代码时,所有列表(inProgress,completed,pending)仍然显示其大小为0,而我明确为每个列表设置每个对象。
你能告诉我我做错了吗? public void saveProgressSheet(List<ProgressSheet> progressList) throws BusinessException
{
List<ProgressSheet> inProgress = new ArrayList<ProgressSheet>();
List<ProgressSheet> completed = new ArrayList<ProgressSheet>();
List<ProgressSheet> pending = new ArrayList<ProgressSheet>();
List<EmpInitiated> empInitiatedList = new ArrayList<EmpInitiated>();
completed=progressList.stream()
.filter(p -> progressList.contains(p.getCaseExternalStatusL1().equalsIgnoreCase("Completed")))
.collect(Collectors.toList());
inProgress =progressList.stream()
.filter(p -> progressList.contains(p.getCaseExternalStatusL1().equalsIgnoreCase("Work In Progress")))
.collect(Collectors.toList());
pending =progressList.stream()
.filter(p -> progressList.contains(p.getCaseExternalStatusL1().equalsIgnoreCase("final report sent case open")))
.collect(Collectors.toList());
}
答案 0 :(得分:3)
你在谓词体中有错误。它应该是。
completed=progressList.stream().filter(p -> p.getCaseExternalStatusL1().equalsIgnoreCase("Completed")).collect(Collectors.toList());
因为否则你只是在列表中搜索布尔值。其他地方也应该改变。
答案 1 :(得分:0)
仅使用您的第一个过滤器:
.filter(p -> progressList.contains(p.getCaseExternalStatusL1().equalsIgnoreCase("Completed")))
在此,你有
p.getCaseExternalStatusL1().equalsIgnoreCase("Completed")
这是一个布尔值,您正在检查progressList
是否包含该布尔值。因为它是ProgressSheet
的列表,所以它不会包含布尔值。你的谓词没有意义。
可能你的意思是:
.filter(p -> p.getCaseExternalStatusL1().equalsIgnoreCase("Completed"))
表示&#34;仅包含值p
p.getCaseExternalStatusL1().equalsIgnoreCase("Completed")
是真的&#34;