Skip to content

Commit 4d556bd

Browse files
committed
Add reduce examples
1 parent 3101b26 commit 4d556bd

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

src/com/winterbe/java8/Streams11.java

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package com.winterbe.java8;
2+
3+
import java.util.Arrays;
4+
import java.util.List;
5+
6+
/**
7+
* @author Benjamin Winterberg
8+
*/
9+
public class Streams11 {
10+
11+
static class Person {
12+
String name;
13+
int age;
14+
15+
Person(String name, int age) {
16+
this.name = name;
17+
this.age = age;
18+
}
19+
20+
@Override
21+
public String toString() {
22+
return name;
23+
}
24+
}
25+
26+
public static void main(String[] args) {
27+
List<Person> persons =
28+
Arrays.asList(
29+
new Person("Max", 18),
30+
new Person("Peter", 23),
31+
new Person("Pamela", 23),
32+
new Person("David", 12));
33+
34+
// test1(persons);
35+
// test2(persons);
36+
// test3(persons);
37+
// test4(persons);
38+
test5(persons);
39+
}
40+
41+
private static void test1(List<Person> persons) {
42+
persons
43+
.stream()
44+
.reduce((p1, p2) -> p1.age > p2.age ? p1 : p2)
45+
.ifPresent(System.out::println); // Pamela
46+
}
47+
48+
private static void test2(List<Person> persons) {
49+
Person result =
50+
persons
51+
.stream()
52+
.reduce(new Person("", 0), (p1, p2) -> {
53+
p1.age += p2.age;
54+
p1.name += p2.name;
55+
return p1;
56+
});
57+
58+
System.out.format("name=%s; age=%s", result.name, result.age);
59+
}
60+
61+
private static void test3(List<Person> persons) {
62+
Integer ageSum = persons
63+
.stream()
64+
.reduce(0, (sum, p) -> sum += p.age, (sum1, sum2) -> sum1 + sum2);
65+
66+
System.out.println(ageSum);
67+
}
68+
69+
private static void test4(List<Person> persons) {
70+
Integer ageSum = persons
71+
.stream()
72+
.reduce(0,
73+
(sum, p) -> {
74+
System.out.format("accumulator: sum=%s; person=%s\n", sum, p);
75+
return sum += p.age;
76+
},
77+
(sum1, sum2) -> {
78+
System.out.format("combiner: sum1=%s; sum2=%s\n", sum1, sum2);
79+
return sum1 + sum2;
80+
});
81+
82+
System.out.println(ageSum);
83+
}
84+
85+
private static void test5(List<Person> persons) {
86+
Integer ageSum = persons
87+
.parallelStream()
88+
.reduce(0,
89+
(sum, p) -> {
90+
System.out.format("accumulator: sum=%s; person=%s\n", sum, p);
91+
return sum += p.age;
92+
},
93+
(sum1, sum2) -> {
94+
System.out.format("combiner: sum1=%s; sum2=%s\n", sum1, sum2);
95+
return sum1 + sum2;
96+
});
97+
98+
System.out.println(ageSum);
99+
}
100+
}

0 commit comments

Comments
 (0)