-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStreamTest.java
More file actions
70 lines (53 loc) · 2.78 KB
/
StreamTest.java
File metadata and controls
70 lines (53 loc) · 2.78 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
66
67
68
69
70
package stream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;
public final class StreamTest {
private StreamTest() {
}
public static void main(String[] args) throws Exception {
// 基于数组创建Stream
Stream<String> stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty");
stream = Stream.empty(); // 创建空的Stream
System.out.println(stream.getClass().getCanonicalName());
Stream<Double> randomGen = Stream.generate(Math::random); // 基于生成器创建的Stream
randomGen.limit(10).forEach(System.out::println);
try (Stream<String> lines = Files.lines(Paths.get("pom.xml"))) {
lines.limit(1).forEach(System.out::println);
}
stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty");
Predicate<String> lenPredicate = str -> str.length() > 3;
stream = stream.filter(lenPredicate); // filter方法接受一个Predicate类型的函数
stream.map(s -> "Hello " + s).forEach(System.out::println); // 使用map函数对集合进行转化
stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty");
Stream<Character> charStream = stream.flatMap(w -> charStream(w)); // 将多个流进行平铺
charStream.forEach(System.out::println);
stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty");
Optional<String> maxLengthName =
stream.max((str1, str2) -> Integer.compare(str1.length(), str2.length()));
System.out.println(">>>> max length name:" + maxLengthName.get());
stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty");
Optional<String> startsWithJ = stream.filter(str -> str.startsWith("J")).findFirst();
System.out.println(">>>> first with J:" + startsWithJ.get());
stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty");
startsWithJ = stream.parallel().filter(str -> str.startsWith("J")).findAny();
System.out.println(">>>> any with J:" + startsWithJ.get());
startsWithJ.ifPresent(System.out::println); // 如果不为null,那么可以指定处理此值的函数
Optional<String> withHello = startsWithJ.map(s -> String.format("Hello %s", s));
System.out.println(withHello.orElse(""));
stream = Stream.of("Sam", "Jack", "Tom", "James", "Lucy", "David", "Betty");
boolean hasStartsWithJ = stream.parallel().anyMatch(s -> s.startsWith("J"));
System.out.println(">>>> starts with j:" + hasStartsWithJ);
}
public static Stream<Character> charStream(String s) {
List<Character> result = new ArrayList<>();
for (char c : s.toCharArray()) {
result.add(c);
}
return result.stream();
}
}