【问题标题】:Two stream processing depending on clause filtering java 8两个流处理依赖于子句过滤java 8
【发布时间】:2017-08-23 05:27:34
【问题描述】:

我有设置 firstSet 和设置 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());

【问题讨论】:

  • 我只需要根据子句解析两个流

标签: dictionary lambda java-8 flatmap


【解决方案1】:

完全避免代码重复:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-17
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多