Skip to content

Commit 0542e18

Browse files
committed
Add implementation for UserServiceImpl
1 parent 0949012 commit 0542e18

1 file changed

Lines changed: 43 additions & 12 deletions

File tree

src/main/java/com/endava/internship/service/UserServiceImpl.java

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,68 +2,99 @@
22

33
import com.endava.internship.domain.Privilege;
44
import com.endava.internship.domain.User;
5-
import com.endava.internship.service.UserService;
65

6+
import java.util.Arrays;
7+
import java.util.Collection;
8+
import java.util.Comparator;
79
import java.util.List;
810
import java.util.Map;
911
import java.util.Optional;
1012
import java.util.function.Function;
1113
import java.util.function.Predicate;
14+
import java.util.stream.Collectors;
1215

1316
public class UserServiceImpl implements UserService {
1417

1518
@Override
1619
public List<String> getFirstNamesReverseSorted(List<User> users) {
17-
throw new UnsupportedOperationException("Not implemented");
20+
return users.stream().
21+
map(User::getFirstName).
22+
sorted((name1, name2) -> -name1.compareTo(name2)).
23+
collect(Collectors.toList());
1824
}
1925

2026
@Override
2127
public List<User> sortByAgeDescAndNameAsc(final List<User> users) {
22-
throw new UnsupportedOperationException("Not implemented");
28+
return users.stream().
29+
sorted(Comparator.
30+
comparing(User::getAge, (age1, age2) -> -age1.compareTo(age2)).
31+
thenComparing(User::getFirstName)
32+
).
33+
collect(Collectors.toList());
2334
}
2435

2536
@Override
2637
public List<Privilege> getAllDistinctPrivileges(final List<User> users) {
27-
throw new UnsupportedOperationException("Not implemented");
38+
return users.stream().
39+
map(User::getPrivileges).
40+
flatMap(Collection::stream).
41+
distinct().
42+
collect(Collectors.toList());
2843
}
2944

3045
@Override
3146
public Optional<User> getUpdateUserWithAgeHigherThan(final List<User> users, final int age) {
32-
throw new UnsupportedOperationException("Not implemented");
47+
return users.stream().
48+
filter(user -> user.getAge() > age).
49+
findFirst();
3350
}
3451

3552
@Override
3653
public Map<Integer, List<User>> groupByCountOfPrivileges(final List<User> users) {
37-
throw new UnsupportedOperationException("Not implemented");
54+
return users.stream().collect(Collectors.groupingBy(user -> user.getPrivileges().size()));
3855
}
3956

4057
@Override
4158
public double getAverageAgeForUsers(final List<User> users) {
42-
throw new UnsupportedOperationException("Not implemented");
59+
return users.stream().mapToDouble(User::getAge).average().orElse(-1d);
4360
}
4461

4562
@Override
4663
public Optional<String> getMostFrequentLastName(final List<User> users) {
47-
throw new UnsupportedOperationException("Not implemented");
64+
Map<String, Long> map = users.stream().map(User::getLastName).
65+
collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
66+
Long max = map.values().stream().max(Long::compareTo).orElse(0L);
67+
return map.values().stream().filter(val -> val.equals(max)).count() != 1 ? Optional.empty() :
68+
map.entrySet().stream().max(Map.Entry.comparingByValue()).map(Map.Entry::getKey);
4869
}
4970

5071
@Override
5172
public List<User> filterBy(final List<User> users, final Predicate<User>... predicates) {
52-
throw new UnsupportedOperationException("Not implemented");
73+
return users.stream().
74+
filter(
75+
Arrays.stream(predicates).reduce(Predicate::and).orElse(x -> true)
76+
).
77+
collect(Collectors.toList());
5378
}
5479

5580
@Override
5681
public String convertTo(final List<User> users, final String delimiter, final Function<User, String> mapFun) {
57-
throw new UnsupportedOperationException("Not implemented");
82+
return users.stream().map(mapFun).reduce((res, str) -> res += delimiter + str).orElse("");
5883
}
5984

6085
@Override
6186
public Map<Privilege, List<User>> groupByPrivileges(List<User> users) {
62-
throw new UnsupportedOperationException("Not implemented");
87+
return users.stream().map(User::getPrivileges).flatMap(Collection::stream).
88+
distinct().
89+
collect(Collectors.toMap(
90+
privilege -> privilege,
91+
privilege -> users.stream().filter(user -> user.getPrivileges().contains(privilege)).collect(Collectors.toList())
92+
)
93+
);
6394
}
6495

6596
@Override
6697
public Map<String, Long> getNumberOfLastNames(final List<User> users) {
67-
throw new UnsupportedOperationException("Not implemented");
98+
return users.stream().collect(Collectors.groupingBy(User::getLastName, Collectors.counting()));
6899
}
69100
}

0 commit comments

Comments
 (0)