package com.insightfullogic.java8.examples.chapter3; import com.insightfullogic.java8.examples.chapter1.Album; import com.insightfullogic.java8.examples.chapter1.Artist; import java.util.HashSet; import java.util.List; import java.util.Set; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; public class Decisions { public static class Imperative { // BEGIN origins_of_bands_meth_imp public Set<String> originsOfBands(Album album) { Set<String> nationalities = new HashSet<>(); for (Artist artist : album.getMusicianList()) { if (artist.getName().startsWith("The")) { String nationality = artist.getNationality(); nationalities.add(nationality); } } return nationalities; } // END origins_of_bands_meth_imp } public Set<String> originsOfBands(Album album) { // BEGIN origins_of_bands Set<String> origins = album.getMusicians() .filter(artist -> artist.getName().startsWith("The")) .map(artist -> artist.getNationality()) .collect(toSet()); // END origins_of_bands return origins; } public Set<String> originsOfBandsMisuse(Album album) { // BEGIN misuse List<Artist> musicians = album.getMusicians() .collect(toList()); List<Artist> bands = musicians.stream() .filter(artist -> artist.getName().startsWith("The")) .collect(toList()); Set<String> origins = bands.stream() .map(artist -> artist.getNationality()) .collect(toSet()); // END misuse return origins; } }