private List<Mailbox> toMailboxes(MailboxPath path, CompletableFuture<Stream<CassandraIdAndPath>> listUserMailboxes) { Pattern regex = Pattern.compile(constructEscapedRegexForMailboxNameMatching(path)); return FluentFutureStream.of(listUserMailboxes) .filter(idAndPath -> regex.matcher(idAndPath.getMailboxPath().getName()).matches()) .map(this::retrieveMailbox, FluentFutureStream::unboxFutureOptional) .join() .collect(Guavate.toImmutableList()); }
private CompletableFuture<Stream<SimpleMailboxMessage>> expungeUidChunk(CassandraId mailboxId, Collection<MessageUid> uidChunk) { return FluentFutureStream.of( uidChunk.stream().map(uid -> retrieveComposedId(mailboxId, uid)), FluentFutureStream::unboxOptional) .performOnAll(this::deleteUsingMailboxId) .map(idWithMetadata -> FluentFutureStream.of( messageDAO.retrieveMessages(ImmutableList.of(idWithMetadata), FetchType.Metadata, Limit.unlimited())), FluentFutureStream::unboxFluentFuture) .filter(CassandraMessageDAO.MessageResult::isFound) .map(CassandraMessageDAO.MessageResult::message) .map(pair -> pair.getKey().toMailboxMessage(ImmutableList.of())) .completableFuture(); }
@Test public void filterShouldBeAppliedOnTheUnderlyingStream() { assertThat( FluentFutureStream.of( CompletableFuture.completedFuture( Stream.of(1, 2, 3))) .filter(i -> i % 2 == 1) .join() .collect(Guavate.toImmutableList())) .containsExactly(1, 3); }
@Test void filterShouldBeAppliedOnTheUnderlyingStream() { assertThat( FluentFutureStream.of( CompletableFuture.completedFuture( Stream.of(1, 2, 3))) .filter(i -> i % 2 == 1) .join() .collect(Guavate.toImmutableList())) .containsExactly(1, 3); }