menu
{$Head.Title}}

flatMap Developer Language Skills

flatMap Developer Language Skills

Klasse Developer

Eine Software Team besteht aus mehreren Entwicklern mit unterschiedlichen Kenntnissen von einer oder mehrerer Programmiersprachen. Jeder Entwickler wird über die Klasse ch.std.jpf2.lambda.flatmap.Developer abgebildet:

package ch.std.jpf2.lambda.flatmap;

import java.util.HashSet;
import java.util.Set;

public class Developer {

  private String name;
  private Set languages;

  public Developer(String name) {
    this.languages = new HashSet<>();
    this.name = name;
  }

  public void add(String language) {
    this.languages.add(language);
  }

  public Set getLanguages() {
    return languages;
  }

  public String getName() {
    return name;
  }
}
Flatmap Unit Test

Der folgende Unit Test zeigt die flatMap Anwendung:

package ch.std.jpf2.lambda.flatmap.test;

import static org.junit.Assert.assertTrue;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.junit.Test;

import ch.std.jpf2.lambda.flatmap.Developer;

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()));
  }
}
Mit FlatMap wird die Liste der Developer und deren Language Skills auf eine einzelne Liste reduziert.
Beispiel Code

Sie finden das komplette Beispiel hier