StreamArrayListProcessing.java
1    /* 
2     * A program to perform some basic op. on a list of Strings using Java streams 
3     */
4    
5    package arraylists;
6    
7    import java.util.ArrayList;
8    import java.util.List;
9    import java.util.stream.Collectors;
10   
11   public class StreamArrayListProcessing {
12   
13       private static String firstName(String directoryStyleName) {
14           int firstName = directoryStyleName.length();
15           int index = 0;
16           index = directoryStyleName.indexOf(" ");
17           directoryStyleName = directoryStyleName.substring(index+1,firstName);
18           return directoryStyleName;
19       }
20   
21       private static String lastName(String directoryStyleName) {
22           int lastName = directoryStyleName.length();
23           int index = 0;
24           index = directoryStyleName.indexOf(",");
25           directoryStyleName = directoryStyleName.substring(0,index);
26           return directoryStyleName;
27       }
28   
29       public static void main(String[] args){
30   
31           //POINT A
32   
33           List<String> names = new ArrayList<>();
34           names.add("Holiday, Billie");
35           names.add("Claudel, Camille");
36           names.add("Picasso, Pablo");
37           names.add("Gallen-Kallela, Akseli");
38           names.add("Zotto, Osvaldo");
39           names.add("Took-Baggins, Belladonna");
40           names.add("Grey, Gandalf");
41   
42           //POINT B
43   
44           List<String> firstNamesList = names.stream()
45                   .map(n -> firstName(n))
46                   .collect(Collectors.toList());
47   
48           System.out.print("First names: ");
49           for (String firstName : firstNamesList){
50               System.out.print(firstName + " ");
51           }
52           System.out.println();
53   
54           //POINT C
55   
56           String firstNames = names.stream()
57                   .map(n -> firstName(n))
58                   .collect(Collectors.joining(", "));
59   
60           System.out.println("First names: " + firstNames);
61   
62           //POINT D
63   
64           String lastNames = names.stream()
65                   .map(n -> lastName(n))
66                   .collect(Collectors.joining(", "));
67   
68           System.out.println("Last names: " + lastNames);
69   
70           //POINT E
71   
72           String upperCaseFullNames = names.stream()
73                   .map(n -> firstName(n))
74                   .map(n -> n.toUpperCase())
75                   .collect(Collectors.joining(", "));
76   
77           System.out.println("Uppercase first names: " + upperCaseFullNames);
78   
79           //POINT F
80   
81           String hyphenatedLastNames = names.stream()
82                   .map(n -> lastName(n))
83                   .filter(n -> n.contains("-"))
84                   .collect(Collectors.joining(", "));
85   
86           System.out.println("Hyphenated last names: " + hyphenatedLastNames);
87   
88           //POINT G
89   
90           int totalLength = names.stream()
91                   .map(n -> n.length())
92                   .reduce(0, (n1, n2) -> n1 + n2);
93   
94           System.out.println("Total length: " + totalLength);
95   
96           //POINT H
97   
98           int firstNameLength = names.stream()
99                   .map(n -> firstName(n))
100                  .map(n -> n.length())
101                  .reduce(0, (n1, n2) -> n1 + n2);
102  
103          System.out.println("Total first name length: " + firstNameLength);
104  
105          //POINT I
106  
107          int productOfLength = names.stream()
108                  .map(n -> n.length())
109                  .reduce(1, (n1, n2) -> n1 * n2);
110  
111          System.out.println("Product of length: " + productOfLength);
112  
113      }
114  
115  }
116