Skip to content

Instantly share code, notes, and snippets.

@smallufo
Created December 31, 2017 17:07
Show Gist options
  • Save smallufo/bd3e790a447a8d17f16b30a3a3aedb76 to your computer and use it in GitHub Desktop.
Save smallufo/bd3e790a447a8d17f16b30a3a3aedb76 to your computer and use it in GitHub Desktop.
interface IBookService {
fun findBooks(user: User, from: LocalDate, to: LocalDate): List<Tuple2<LocalDate, Book>>
fun findUserBooks(users: List<User>, from: LocalDate, to: LocalDate): List<Tuple3<LocalDate, User, Book>> {
val map = users.stream()
.flatMap { user ->
val list = findBooks(user, from, to)
list.stream().map { t -> Tuple.tuple(t.v1, user, t.v2) }
}.collect<TreeMap<LocalDate, Tuple2<User, Book>>, Any>(Collectors.toMap(
Function<Tuple3<LocalDate, User, Book>, LocalDate> { it.v1() },
{ t -> Tuple.tuple(t.v2(), t.v3()) },
{ v1, v2 -> v1 },
Supplier<TreeMap<LocalDate, Tuple2<User, Book>>> { TreeMap() })
)
return map.entries.stream()
.map { entry -> Tuple.tuple(entry.key, entry.value.v1, entry.value.v2) }
.collect<List<Tuple3<LocalDate, User, Book>>, Any>(Collectors.toList())
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment