Краткий пример:
Допустим, у вас есть простой User
класс:
public class User {
private int id;
private String name;
// etc
}
И, скажем, у вас изначально есть List
из них:
List<User> users;
Найти пользователя по идентификатору можно следующим образом:
users.stream().filter(u -> u.getId() == id).findFirst();
Однако, если список пользователей большой, это может быть медленным.
Вы можете хранить пользователейв Map
:
Map<Integer, User> usersById;
Эта карта будет ссылаться только на другие объекты, поэтому занимает мало места (но все же занимает некоторые, это как индекс).
Выможете заполнить эту карту следующим образом:
usersById = users.stream().collect(Collectors.toMap(User::getId, Function.identity()));
Или, более традиционно:
usersById = new HashMap<>();
for(User u : users) {
usersById.put(u.getId(), u);
}
Чтобы найти пользователя по идентификатору сейчас, вы можете использовать это (с O(1)
производительностью):
User user = usersById.get(id);