milingo
1/26/2015 - 3:57 PM

lambdas.java

# Turn a List<> into String[]
String[] strings = list.stream().toArray(String[]::new);

# Reduce by collecting over a field
list.stream().collect(Collectors.mapping(
                      Person::getName,
                      Collectors.toList())),

# Run several tasks asynchronously and wait for them
CompletableFuture<Map<String, List<String>>> campaignsByGeohashWithLocationsFuture =
        CompletableFuture.supplyAsync(() -> findCampaignIdsInCoordinates(request));
  
CompletableFuture<Map<String, List<String>>> campaignByUserWithLocationsFuture =
        CompletableFuture.supplyAsync(() -> findCampaignsIdsForUser(request));
Map<String, List<String>> campaignsByGeohashWithLocations = waitForResult(campaignsByGeohashWithLocationsFuture);
Map<String, List<String>> campaignByUserWithLocations = waitForResult(campaignByUserWithLocationsFuture);

private Map<String, List<String>> waitForResult(CompletableFuture<Map<String, List<String>>> campaignsWithLocationsFuture) {
    Map<String, List<String>> campaignsWithLocations;
    try {
        campaignsWithLocations = campaignsWithLocationsFuture.get();
    } catch (Exception e) {
        campaignsWithLocations = new HashMap<>();
    }
    return campaignsWithLocations;
}