2017-03-29 2 views
1

Ich habe FirstSet gesetzt und SetSet. Ich muss endgültig setzen Bohnen setzen;Zwei Stream-Verarbeitung je nach Klausel Filterung java 8

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

Wie kann ich es mit Lambda-Ausdruck schreiben? (muss zwei Ströme analysieren).

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

Ich brauche nur zwei Stream zu analysieren abhängig auf Klausel –

Antwort

4

vermeiden Sie einfach den Code-Duplizierung zusammen:

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

Beachten Sie, dass Sie auch die Code-Duplizierung in der Schleife hätte vermieden werden können:

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