-
Notifications
You must be signed in to change notification settings - Fork 183
Expand file tree
/
Copy pathStream_03_Test.java
More file actions
121 lines (86 loc) · 3.41 KB
/
Stream_03_Test.java
File metadata and controls
121 lines (86 loc) · 3.41 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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package java17.ex03;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import org.junit.Test;
import java17.data.Data;
import java17.data.domain.Customer;
import java17.data.domain.Order;
import java17.data.domain.Pizza;
/**
* Exercice 03 - Collectors
*/
public class Stream_03_Test {
@Test
public void test_max() throws Exception {
List<Order> orders = new Data().getOrders();
// TODO Retrouver la commande avec le prix le plus élevé
Comparator<Order> comparator = (Order o1, Order o2) -> {
if (o1.getPrice()>o2.getPrice()) {
return 1;
} else if (o1.getPrice()<o2.getPrice()) {
return -1;
} return 0;
};
// Comparator.comparating(x->x.getMethode)
Optional<Order> result = orders.stream().max(Comparator.comparing(o->o.getPrice()));
assertThat(result.isPresent(), is(true));
assertThat(result.get().getPrice(), is(2200.0));
}
@Test
public void test_min() throws Exception {
List<Order> orders = new Data().getOrders();
// TODO Retrouver la commande avec le prix le moins élevé
// cas inverse de max
Optional<Order> result = orders.stream().min(Comparator.comparing(o->o.getPrice()));
assertThat(result.isPresent(), is(true));
assertThat(result.get().getPrice(), is(1000.0));
}
@Test
public void test_map_collect_joining() throws Exception {
List<Customer> customers = new Data().getCustomers();
// TODO construire une chaîne contenant les prénoms des clients triés et séparés
// par le caractère "|"
String result = customers.stream().map(c->c.getFirstname()).sorted().collect(Collectors.joining("|"));
assertThat(result, is("Alexandra|Cyril|Johnny|Marion|Sophie"));
}
@Test
public void test_flatMap() throws Exception {
List<Order> orders = new Data().getOrders();
// TODO Extraire la liste des pizzas de toutes les commandes
List<Pizza> result = orders.stream().flatMap(o->o.getPizzas().stream()).toList();
assertThat(result.size(), is(9));
}
@Test
public void test_flatMap_distinct() throws Exception {
List<Order> orders = new Data().getOrders();
// TODO Extraire la liste des différentes pizzas de toutes les commandes
List<Pizza> result = orders.stream().flatMap(o->o.getPizzas().stream()).distinct().toList();;
assertThat(result.size(), is(4));
}
@Test
public void test_grouping() throws Exception {
List<Order> orders = new Data().getOrders();
// TODO construire une Map <Client, Commandes effectuées par le client
Map<Customer, List<Order>> result = orders.stream().collect(Collectors.groupingBy(Order::getCustomer)); // Order::getMethode reviens à faire x->x.getMethode
assertThat(result.size(), is(2));
assertThat(result.get(new Customer(1)), hasSize(4));
assertThat(result.get(new Customer(2)), hasSize(4));
}
@Test
public void test_partitionning() throws Exception {
List<Pizza> pizzas = new Data().getPizzas();
// TODO Séparer la liste des pizzas en 2 ensembles :
// TODO true -> les pizzas dont le nom commence par "L"
// TODO false -> les autres
Map<Boolean, List<Pizza>> result = pizzas.stream().collect(Collectors.partitioningBy(p->p.getName().charAt(0) == 'L'));
assertThat(result.get(true), hasSize(6));
assertThat(result.get(false), hasSize(2));
}
}