I have class like:
public class User {
private Long id;
private String firstname;
private String lastname;
private Address address;
private boolean active;
private List<Country> countries;
}
public class Country {
private String name;
private String capital;
}
And I need to sort users by country's name. I made something like this:
final Map<String, List<UserHelper>> usersByCountry = new HashMap<>();
users.stream()
.filter(User::isActive)
.forEach(user -> user.getCountry().stream()
.map(Country::getName)
.forEach(name -> {
if (usersByCountry.containsKey(name)) {
usersByCountry.get(name).add(new UserHelper(user.getId(), user.getFirstname()));
} else {
usersByCountry.put(name, new ArrayList<>(List.of(new UserHelper(user.getId(), user.getFirstname()))));
}
}));
@Value
private class UserHelper {
Long id;
String firstname;
}
But I want to avoid adding elements to map in foreach. I prefer something like Collectors.toMap()
or groupingBy
but I don't have any idea how can I do this in this place.