-
Notifications
You must be signed in to change notification settings - Fork 48
/
ch09_Stream123s.java
64 lines (56 loc) · 2.37 KB
/
ch09_Stream123s.java
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
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ch09_Stream123s {
public static void main(String[] args) {
Stream<Integer> numbers = Stream.of(1, 2, 3);
Stream<Integer> oddNumbers = oddNumbers(numbers);
List<Integer> result = oddNumbers.collect(Collectors.toList());
assert(result.equals(List.of(1, 3)));
// System.out.println(numbers.count()); // not possible because we can't reuse Java Streams
Stream<Integer> infiniteNumbers = Stream.iterate(0, i -> i + 1);
Stream<Integer> infiniteOddNumbers = oddNumbers(infiniteNumbers);
// List<Integer> infiniteResult = infiniteOddNumbers.collect(Collectors.toList());
Stream<Integer> limitedStream = infiniteOddNumbers.limit(3);
List<Integer> limitedResult = limitedStream.collect(Collectors.toList());
assert(limitedResult.equals(List.of(1, 3, 5)));
// Stream<Integer> oddNumbersStream = numbers.filter(n -> n % 2 != 0); // not possible because we can't reuse Java Streams
Stream<Integer> randomNumbers = Stream.generate(new Random()::nextInt);
List<Integer> randomResult = oddNumbers(randomNumbers).limit(3).collect(Collectors.toList());
System.out.println(randomResult);
Stream<Map<String, BigDecimal>> usdRates = Stream.generate(() -> ch09_CurrencyExchangeImpure.exchangeRatesTableApiCall("USD"));
try {
System.out.println("The following will throw: ");
usdRates.limit(10).collect(Collectors.toList());
System.out.println("Most probably won't happen!");
} catch(Exception e) {
System.out.println("Exception thrown: " + e.getMessage());
}
}
static Stream<Integer> oddNumbers(Stream<Integer> numbers) {
return numbers.filter(n -> n % 2 != 0);
}
/** in Python:
* import itertools
*
* def infinite_numbers():
* x=0
* while(True):
* x=x+1
* yield x
*
*
* def odd_numbers(numbers):
* return filter(lambda i: i%2 != 0, numbers)
*
* infinite_odd_numbers = odd_numbers(infinite_numbers())
*
* limited_result = itertools.islice(infinite_odd_numbers, 3)
*
* print(list(limited_result))
* [1, 3, 5]
*/
}