Java 8流和过滤器不在列表上工作

时间:2016-01-12 13:44:29

标签: java lambda java-8

在下面的代码中,我需要根据名为' 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());
}

2 个答案:

答案 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;