ArrayListProcessing.java
/* 
 a program to perform some basic operations on a list of string names. 
 */

package arraylists;

import java.util.ArrayList;
import java.util.List;

public class ArrayListProcessing {
     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("McCall, Scott");
         names.add("Sawayama, Rina");
         names.add("Burgos, Kabir");

         List<String> firstNamesList = firstNames(names);

         System.out.print("First names: ");
         for (String firstName : firstNamesList) {
             System.out.print(firstName + " ");
         }
         System.out.println();

         String firstNames = String.join(", ", firstNamesList);

         System.out.println("First names: " + firstNames);
         List<String> lastNameList = lastNames(names);
         System.out.print("Last names: ");
         for (String lastName : lastNameList) {
             System.out.print(lastName + " ");
         }

         System.out.println();
         String lastNames = String.join(", ", lastNameList);

         System.out.println("First names: " + lastNames);
         List<String> upperCaseFirstNamesList = upperCaseNames(firstNames(names));

         String upperCaseFirstNames = String.join(", ", upperCaseFirstNamesList);
         System.out.println("Uppercase first names: " + upperCaseFirstNames);

         List<String> hyphenatedNamesList = hyphenatedNames(names);
         String hyphenatedNames = String.join(",", hyphenatedNamesList);

         System.out.println("Hyphenated Names: " + hyphenatedNames);
         int totalLength = totalNameLength(names);

         System.out.println("Total length: " + totalLength);

         int totalFirstNamesLength = totalFirstNameLength(names);
         System.out.println("Total First Name length: " + totalFirstNamesLength);

         int totalProduct = productOfNameLengths(names);
         System.out.println("Total Product of Name Length: " +totalProduct);
     }

     private static List<String> firstNames(List<String> names) {
         List<String> firsts = new ArrayList<>();
         for (String name : names) {
             firsts.add(firstName(name));
         }
         return firsts;
     }

     private static String firstName(String directoryStyleName) {
         int commaPosition = directoryStyleName.indexOf(",");
         String firstName = directoryStyleName.substring(2 + commaPosition);
         return firstName;
     }

     private static List<String> lastNames(List<String> names) {
         List<String> lasts = new ArrayList<>();
         for (String name : names) {
             lasts.add(lastName(name));
         }
         return lasts;
     }

     private static String lastName(String directoryStyleName) {
         int commaPosition = directoryStyleName.indexOf(",");
         String lastName = directoryStyleName.substring(0, commaPosition);
         return lastName;
     }

     public static List<String> upperCaseNames(List<String> names) {
         List<String> uppercases = new ArrayList<>();
         for (String name : names) {
             uppercases.add(name.toUpperCase());
         }
         return uppercases;
     }

      public static List<String> hyphenatedNames(List<String> names){
         List<String> hyphenateds = new ArrayList<>();
         for (String name : names){
             if (name.contains("-")) {
                 hyphenateds.add(name);
             }
         }
         return hyphenateds;
     }

      public static int totalNameLength(List<String> names){
         int totalLength = 0;
         for (String name : names){
             totalLength = totalLength + name.length();
         }
         return totalLength;
     }

     public static int totalFirstNameLength(List<String> names){
         int totalFirstNameLength = 0;
         for (String name : firstNames(names)){
             totalFirstNameLength = totalFirstNameLength + name.length();
         }
         return totalFirstNameLength;
     }

     public static int productOfNameLengths(List<String> names){
         int totalProduct = 1;
         for(String name : names){
             totalProduct= totalProduct*name.length();
         }
         return totalProduct;
     }
}