### Question:
RecordJoiner { public Stream<Record> oneToMany(Collection<? extends Record> rights, ListKey<Record> manyKey) { return oneToMany(rights.stream(), manyKey); } RecordJoiner(Index<K, Record> leftIndex, JoinKey<Record, K> primaryKey); Stream<Record> manyToOne(Collection<? extends Record> rights); Stream<Record> manyToOne(Fetcher<K, Record> fetcher); Stream<Record> manyToOne(Stream<? extends Record> rights); Stream<Record> strictManyToOne(Collection<? extends Record> rights); Stream<Record> strictManyToOne(Fetcher<K, Record> fetcher); Stream<Record> strictManyToOne(Stream<? extends Record> rights); Stream<Record> oneToMany(Collection<? extends Record> rights, ListKey<Record> manyKey); Stream<Record> oneToMany(Fetcher<K, Record> fetcher, ListKey<Record> manyKey); Stream<Record> oneToMany(Stream<? extends Record> rights, ListKey<Record> manyKey); Stream<Record> strictOneToMany(Collection<? extends Record> rights, ListKey<Record> manyKey); Stream<Record> strictOneToMany(Fetcher<K, Record> fetcher, ListKey<Record> manyKey); Stream<Record> strictOneToMany(Stream<? extends Record> rights, ListKey<Record> manyKey); Stream<Record> strictOneToOne(Collection<? extends Record> rights); Stream<Record> strictOneToOne(Fetcher<K, Record> fetcher); Stream<Record> strictOneToOne(Stream<? extends Record> rights);  }### Answer:
@Test public void one_to_many_join() { Record joined = RecordJoins.join(authors).on(id) .to(authorId).oneToMany(books, authored) .filter(authorName.is("Alan Goodyear")) .findFirst().get(); assertThat(authored.extract(joined), hasItems( cromulenceOfTruths, amorousEncounters) ); }