-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy pathResolver.java
More file actions
80 lines (69 loc) · 2.29 KB
/
Resolver.java
File metadata and controls
80 lines (69 loc) · 2.29 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
package ru.urfu.resolver;
import ru.urfu.model.Player;
import ru.urfu.graphics.Graphic;
import java.util.Map;
import java.util.List;
import java.util.Comparator;
import java.util.stream.Collectors;
public class Resolver implements IResolver {
private final List<Player> players;
public Resolver(List<Player> players) {
this.players = players;
}
private String translatePositionToRussian(String position) {
switch (position.toUpperCase()) {
case "GOALKEEPER": return "Вратарь";
case "DEFENDER": return "Защитник";
case "MIDFIELD": return "Полузащитник";
case "FORWARD": return "Нападающий";
default: return position;
}
}
@Override
public int getCountWithoutAgency() {
return (int) players
.stream()
.filter(player ->
player.getAgency() == null ||
player.getAgency().isEmpty() ||
player.getAgency().equals("-")
)
.count();
}
@Override
public int getMaxDefenderGoalsCount() {
return players
.stream()
.filter(player -> player.getPosition().equals("DEFENDER"))
.mapToInt(Player::getGoals)
.max()
.orElse(0);
}
@Override
public String getTheExpensiveGermanPlayerPosition() {
Player expensiveGerman = players
.stream()
.filter(player -> player.getNationality().equals("Germany"))
.max((p1, p2) -> Long.compare(p1.getTransferCost(), p2.getTransferCost()))
.orElse(null);
if (expensiveGerman != null) {
return translatePositionToRussian(expensiveGerman.getPosition());
}
return "Не найден";
}
@Override
public String getTheRudestTeam() {
Map<String, Double> teamRedCardsAvg = players
.stream()
.collect(Collectors.groupingBy(
Player::getTeam,
Collectors.averagingDouble(Player::getRedCards)
));
return teamRedCardsAvg
.entrySet()
.stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse("Не найдена");
}
}