java8的stream的相关问题

List<BaseNode> collect = getData().stream()
                .filter(baseNode -> baseNode instanceof OrderDetail)
                .collect(Collectors.toList());
Optional<BaseNode> node = collect.stream()
                .filter(detail -> tools.getToolId().equals(((OrderDetail) detail).getToolId()))
                .findFirst();

这两句代码是什么意思,OrderDetail和tools两个实体类,该两句话是作用在李哥二级列表里面,OrderDetail类是一级列表

第一句是在 BaseNode类型的集合里筛选出类型为OrderDetail的对象集合
第二句是在筛选后的数据里找出 toolId和已知对象tools的toolId相等的对象

找到OrderDetail列表中第一个toolId等于tools类toolId的对象

第一行:getData()返回一个BaseNode的集合,过滤符合条件(baseNode instanceof OrderDetail)得到新的集合collect.
第四行:返回collect集合内第一个符合条件(tools.getToolId().equals(((OrderDetail) detail).getToolId())的元素。