import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Mapper {
    static Function<String, CharactersCount> getDistinctCharactersCount() {

        return s->{
            //Using Java 8
            Stream<String> nameAsStream = Arrays.stream(new String[]{s});
            List<String> transformedNameAsListOfSingleCharacters = nameAsStream
                    .map(name -> name.split("")) //Transform into separate strings of each character
                    .flatMap(Arrays::stream)
                    .distinct()//Here redundant characters are removed
                    .collect(Collectors.toList());

            System.out.println("Java 8. Stripped name as list of characters: " + transformedNameAsListOfSingleCharacters);

           //Using Java 7:
            String resString = "";
            for(char c:s.toCharArray()) {
                if(!resString.contains(Character.toString(c))){
                    resString = resString + c;
                }
            }
            System.out.println("Java 7: The name " + s + " transforms to " + resString);

            //return new CharactersCount(s,s.length());
            return new CharactersCount(s,transformedNameAsListOfSingleCharacters.size());
        };

    }
}
