StreamArrayListProcessing.java
package arraylists;

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

public class StreamArrayListProcessing {
    public static  void main(String[] args){
        List<String> names = new ArrayList<>();
        names.add("Holiday, Billie");
        names.add("Claudel, Camille");
        names.add("Picasso, Pablo");
        names.add("Gallen-kallela, Akseli");
        names.add("Zotto, Osvaldo");
        names.add("Bhatt, Aashutosh");
        names.add("Shrestha, Bipin");


        //  Point B: Use map and the toList collector to create an ArrayList of just the first  names of the names ArrayList.
        // Use a for loop to print out the names, separated by spaces

        List<String> firstNamesList =  names.stream()
                .map(n -> firstName(n))
                .collect(Collectors.toList());
        System.out.print("First names:");
        for (String firstName : firstNamesList) {
            System.out.print(firstName + " ");
        }
        System.out.println();

        //Point C: Use map and the joining collector to create a String of just the first names of the names ArrayList with each name separated by a comma. Print it.
        String firstNames = names.stream()
                .map(n -> firstName(n))
                .collect(Collectors.joining(", "));
        System.out.println("First names:" +firstNames);

        //Point D: By Analogy from point C, print a comma-separated list of the last names in the names ArrayList.

        String lastNames= names.stream()
                .map(n-> lastName(n))
                .collect(Collectors.joining(", "));
        System.out.println("Last names:" + lastNames);

        //Point E: Print a comma-separated list of all uppercase first names
        // from the list of names in the names ArrayList.
        String upperCaseFirstNames= names.stream()
                .map(n-> firstName(n))
                .map(n->n.toUpperCase())
                .collect(Collectors.joining(", "));
        System.out.println("Uppercase first names:"+ upperCaseFirstNames);

        //Point F: print a comma-separated list of all hyphenated last names from the
        // list of names in the names ArrayList.
        String hyphenatedLastNames= names.stream()
                .map(n-> lastName(n))
                .filter(n-> n.contains("-"))
                .collect(Collectors.joining(","));
        System.out.println("Hyphenated last names:"+ hyphenatedLastNames);
        //Point G: print the integer value of the total length of all names in the names Arraylist.
        int totalLength= names.stream()
                .map(n-> n.length())
                .reduce(0,(n1,n2)-> n1 + n2);
        System.out.println("Total length:"+ totalLength);

        int totalFirstLength= firstNamesList.stream()
                .map(n-> n.length())
                .reduce(0,(n1,n2)-> n1 + n2);
        System.out.println("Total first length:"+ totalFirstLength);

        double totalProduct= names.stream()
                .map(n-> n.length())
                .reduce(1,(n1,n2)-> n1 * n2);
        System.out.println("Total Product:"+ totalProduct);


    }
    private static String firstName(String directoryStyleName) {
        int commaposition = directoryStyleName.indexOf(",");
        String firstName = directoryStyleName.substring(commaposition +1);
        return firstName;
    }
    private static String lastName(String directoryStyleName) {
        int commaposition = directoryStyleName.indexOf(",");
        String lastNames = directoryStyleName.substring(0,commaposition);
        return lastNames;
    }

}