Skip to content

Instantly share code, notes, and snippets.

@spencerwi
Created May 6, 2016 15:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spencerwi/26ad17413288ef1586ab6e56372140e5 to your computer and use it in GitHub Desktop.
Save spencerwi/26ad17413288ef1586ab6e56372140e5 to your computer and use it in GitHub Desktop.
HigherKindedTypes blog post code
public interface Mappable<A> {
public <B> Mappable<B> map(Function<A, B> f);
}
// assuming that getLastUserWhoLoggedIn might return null
String timeZoneOfLastLoggedInUser = Optional.ofNullable(userService.getLastUserWhoLoggedIn()) // Optional<User>
.map(user -> user.getAddress()) // Optional<Address>
.map(address -> timeZoneService.getTimeZone(address)) // Optional<TimeZone>
.map(timeZone -> timeZone.toString()) // Optional<String>
.orElse("UTC"); // safely "unwrapping" our Optional<String> to get just a String
someListOfListsOfOptionals.stream()
.flatMap(listOfOptionals -> listOfOptionals.stream()
.map(optional -> optional.map(user -> user.getEmail() ).orElse(""))
) //...
public List<Integer> parseNumbers(Function<String, Integer> numberParser, List<String> stringsToParse){
// for every string in stringsToParse, run it through numberParser and add it to a list.
}
// assuming that we have a List<Integer> named someListOfIntegers
someListOfIntegers.stream() // gives us a Stream<Integer>
.map(x -> x.toString()) // now we have a Stream<String>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment