public class Streams
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: }