У меня есть список массивов со следующими элементами.
List<Record> list = new ArrayList<>();
list.add(new Record(3, "32"));
list.add(new Record(4, "42"));
list.add(new Record(1, "12"));
list.add(new Record(1, "11"));
list.add(new Record(2, "22"));
list.add(new Record(5, "52"));
list.add(new Record(5, "53"));
list.add(new Record(5, "51"));
Запись - это простое POJO с идентификатором и именем
Я хочу сделать это в списке.
-
Создайте такую карту, как
Map<Integer, List<Record>>
, у которой ключ - это идентификатор id и более тонкий ключ в качестве списка. Я сделал это как ниже.Map<Integer, List<Record>> map = list.stream() .collect(Collectors.groupingBy(Record::getId, HashMap::new, Collectors.toList()));
-
Теперь я хочу отсортировать список по имени и подкатегорию с предоставленным лимитом внутри карты
map.forEach((k, v) -> v.stream().sorted(Comparator.comparing(Record::getName))); map.forEach((k, v) -> map.put(k, v.subList(0, Math.min(**limit**, v.size()))));
Я пробовал, как указано выше, и выглядит так, как будто это не очень хорошо. Может ли кто-нибудь предложить лучший способ?