两个流处理取决于子句过滤java 8

时间:2017-03-29 15:50:12

标签: dictionary lambda java-8 flatmap

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

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-expression编写它? (需要解析两个流)。

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());

1 个答案:

答案 0 :(得分:4)

完全避免代码重复:

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());