两个流处理依赖子句过滤java 8

Two stream processing depending on clause filtering java 8

我设置了 firstSet 和 Set secondSet。 我需要获得最终的 Set bean;

Set<Bean> beans = new HashSet<Bean>();
        for(BigDecimal element: firstSet){
            if(secondSet.contains(element)){
                beans.add(new BeanBuilder().id(element).isNew(Boolean.TRUE).build());
            } else {
                beans.add(new BeanBuilder().id(element).isNew(Boolean.FALSE).build());
            }
        }

如何使用 lambda 表达式编写它? (需要解析两个流)。

Set<BEBean> arr = firstSet
        .stream()
                   .flatMap( if(secondSet::contains) {
                new BeanBuilder().id(x).isNew(Boolean.TRUE).build();
                } else {
                new BEBuilder().id(x).name(Boolean.FALSE).build();
                })
        .collect(Collectors.toSet());

完全避免代码重复:

Set<BEBean> beans = availableResources
    .stream()
    .map(e -> new BeanBuilder().id(e).isNew(secondSet.contains(e)).build())
    .collect(Collectors.toSet());

请注意,您也可以避免循环中的代码重复:

Set<Bean> beans = new HashSet<Bean>();
for(BigDecimal element: firstSet)
    beans.add(new BeanBuilder().id(element).isNew(secondSet.contains(element)).build());