forked from igor-baiborodine/java-various-examples
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStreamInterfaceExample.java
More file actions
65 lines (50 loc) · 1.71 KB
/
StreamInterfaceExample.java
File metadata and controls
65 lines (50 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.kiroule.ocpupgradejava8.topic3_2;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Stream;
import static java.lang.String.format;
/**
* @author Igor Baiborodine
*/
public class StreamInterfaceExample {
public static void main(String... args) throws InterruptedException {
List<FuturamaCharacter> characters = Arrays.asList(
new FuturamaCharacter("Bender", "Rodriguez", "robot"),
new FuturamaCharacter("Philip", "Fry", "human"),
new FuturamaCharacter("Turanga", "Leela", "mutant"));
Stream<FuturamaCharacter> characterStream = characters.stream();
long count = characterStream
.peek(c -> System.out.println("Filtered value: " + c))
.filter(new MutantSpeciesPredicate())
.count();
System.out.printf("%nFound %d mutant(s).", count);
Thread.sleep(500);
// Cannot re-use the stream, it will throw a runtime exception:
// java.lang.IllegalStateException: stream has already been operated upon or closed
characterStream.count();
}
}
class MutantSpeciesPredicate implements Predicate<FuturamaCharacter> {
@Override
public boolean test(FuturamaCharacter character) {
return "mutant".equals(character.getSpecies());
}
}
class FuturamaCharacter {
private String firstName;
private String lastName;
private String species = "human";
public FuturamaCharacter(String firstName, String lastName, String species) {
this.firstName = firstName;
this.lastName = lastName;
this.species = species;
}
public String getSpecies() {
return species;
}
@Override
public String toString() {
return format("%s %s [%s]", firstName, lastName, species);
}
}