Java 8 FlatMap Example 📎
A developer knows a set of programming languages:
public class Developer {
private String name;
private Set<String> languages;
public Developer(String name) {
this.languages = new HashSet<>();
this.name = name;
}
public void add(String language) {
this.languages.add(language);
}
public Set<String> getLanguages() {
return languages;
}
}
A team has more than one developers. Now we would like to know the aggregate programming language skills for a given team.
Stream#flatMap is
perfect for "flattening" collections:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
public class FlatMapTest {
@Test
public void flatMap() {
List<Developer> team = new ArrayList<>();
Developer polyglot = new Developer("esoteric");
polyglot.add("clojure");
polyglot.add("scala");
polyglot.add("groovy");
polyglot.add("go");
Developer busy = new Developer("pragmatic");
busy.add("java");
busy.add("javascript");
team.add(polyglot);
team.add(busy);
List<String> teamLanguages = team.stream().
map(d -> d.getLanguages()).
flatMap(l -> l.stream()).
collect(Collectors.toList());
assertTrue(teamLanguages.containsAll(polyglot.getLanguages()));
assertTrue(teamLanguages.containsAll(busy.getLanguages()));
}
}
Related: Java 8 CompletableFuture Example
See you at Java EE Workshops at Munich Airport, Terminal 2, particularly at: Java 8 with Java EE 7 or Virtual Dedicated Workshops / consulting