Source of Streams.java


  2: import java.util.Scanner;
  3: import java.util.List;
  4: import java.util.ArrayList;
  5: import java.util.stream.Collectors;

  7: /**
  8:  * A program to demonstrate the basics of Streams.
  9:  *
 10:  * @author Mark Young (A00000000)
 11:  */
 12: public class Streams {

 14:     public static void main(String[] args) {
 15:         // create some lists
 16:         List<String> words = makeWordList();
 17:         List<Integer> numbers = makeNumberList();
 18:         List<String> fWords, uppers;
 19:         List<Integer> smallEven, squares;

 21:         // show them
 22:         System.out.println("Here are a couple of Lists:");
 23:         System.out.println("\t" + words);
 24:         System.out.println("\t" + numbers);
 25:         pause();
 26:         
 27:         // stream.forEach
 28:         System.out.println("words, printed using stream().forEach:");
 29:         words.stream().forEach(t -> System.out.println("\t" + t));
 30:         pause();

 32:         // make a list of the F words
 33:         System.out.println("Making a List of the words that start with F:");
 34:         fWords = words.stream()
 35:                     .filter(t -> t.toUpperCase().startsWith("F"))
 36: //                    .toList(); // Available starting in Java 16
 37:                     .collect(Collectors.toList());
 38:         System.out.println("\t" + fWords);
 39:         pause();

 41:         // make a list of the small, even numbers
 42:         System.out.println("Making a List of the small, even numbers:");
 43:         smallEven = numbers.stream()
 44: //                    .peek(e -> System.out.println("Original: " + e))
 45:                     .filter(t -> t < 20)
 46: //                    .peek(e -> System.out.println(" - Small: " + e))
 47:                     .filter(t -> t % 2 == 0)
 48: //                    .peek(e -> System.out.println(" -- Even: " + e))
 49:                     .collect(Collectors.toList());
 50:         System.out.println("\t" + smallEven);
 51:         pause();

 53:         // print list out in special format
 54:         System.out.println("A fancy way of writing the f-words: "
 55:                 + fWords.stream()
 56:                     .collect(Collectors.joining("-", "==", "==")));
 57:         pause();

 59:         // mapping numbers to their squares
 60:         System.out.println("Making a list of the squares:");
 61:         squares = numbers.stream()
 62:                     .map(n -> n * n)
 63:                     .collect(Collectors.toList());
 64:         System.out.println("\toriginals: " + numbers);
 65:         System.out.println("\tsquares:   " + squares);
 66:         pause();

 68:         // mapping strings to upper case
 69:         System.out.println("Making a list of upper-case words:");
 70:         uppers = words.stream()
 71:                     .map(s -> s.toUpperCase())
 72:                     .collect(Collectors.toList());
 73:         System.out.println("\toriginals: " + words);
 74:         System.out.println("\tupperCase: " + uppers);
 75:         pause();

 77:         // summing numbers
 78:         System.out.println("Summing number lists:");
 79:         System.out.println("\toriginal:     " 
 80:                 + numbers.stream().reduce(0, (a, b) -> a + b));
 81:         System.out.println("\tsmall, evens: " 
 82:                 + smallEven.stream().reduce(0, (a, b) -> a + b));
 83:         System.out.println("\tsquares:      " 
 84:                 + squares.stream().reduce(0, (a, b) -> a + b));
 85:         pause();

 87:         // using named methods
 88:         System.out.println("Printing the fWords using System.out::println:");
 89:         fWords.stream().forEach(System.out::println);
 90:         pause();

 92:         // capitalizing using named method
 93:         System.out.println("Capitalizing using String::toUpperCase: "
 94:                 + fWords.stream()
 95:                         .map(String::toUpperCase)
 96:                         .collect(Collectors.toList()));
 97:         pause();

 99:         // summing lists using named methods
100:         System.out.println("Summing list using Integer::sum:");
101:         System.out.println("\toriginal:     " 
102:                 + numbers.stream().reduce(0, Integer::sum));
103:         System.out.println("\tsmall, evens: " 
104:                 + smallEven.stream().reduce(0, Integer::sum));
105:         System.out.println("\tsquares:      " 
106:                 + squares.stream().reduce(0, Integer::sum));
107:         pause();

109:         // show them again
110:         System.out.println("The lists themselves are unchanged:");
111:         System.out.println("\t" + words);
112:         System.out.println("\t" + numbers);
113:         pause();
114:     }

116:     /**
117:      * Create a list of words.
118:      *
119:      * @return a list of words.
120:      */
121:     private static List<String> makeWordList() {
122:         List<String> result = new ArrayList<>();

124:         result.add("Ten");
125:         result.add("Fifteen");
126:         result.add("Twenty");
127:         result.add("Thirty");
128:         result.add("Forty");
129:         result.add("Fifty");
130:         result.add("Sixty");

132:         return result;
133:     }
134:     
135:     /**
136:      * Create a list of numbers.
137:      *
138:      * @return a list of numbers.
139:      */
140:     private static List<Integer> makeNumberList() {
141:         List<Integer> result = new ArrayList<>();

143:         result.add(5);
144:         result.add(10);
145:         result.add(17);
146:         result.add(18);
147:         result.add(20);
148:         result.add(22);
149:         result.add(67);

151:         return result;
152:     }
153:     
154:     private static final Scanner kbd = new Scanner(System.in);

156:     /**
157:      * Prompt the user and wait for them to press enter.
158:      */
159:     private static void pause() {
160:         System.out.println();
161:         System.out.print("...press enter...");
162:         kbd.nextLine();
163:         System.out.println();
164:     }
165:     
166: }