Я ищу хороший способ группировать список объектов по нескольким атрибутам класса. Google guava library предоставляет функцию группировки по одному атрибуту. Я еще не нашел утилиту, которая предлагает то, что я ищу.Группируйте список объектов по нескольким атрибутам
См. Ниже. Я инкапсулировал атрибуты группировки в свой класс Grouping
. Однако это не обязательно, если существует лучшее решение.
Класс, который содержит группирующие атрибуты.
Class Grouping{
private String key1;
private String key2;
private String key3;
//getters, setters
}
Класс, представляющий тип, который необходимо сгруппировать.
Class Groupable{
private Grouping grouping;
private String x;
private String y;
private String z;
// getters, setters
}
Что мне нужно, это карта, содержащая в качестве ключа, объект Groupable с уникальным набором ключей. И список объектов Groupable как соответствующие сгруппированные элементы.
Map<Grouping, List<Groupable>> groupings;
Любые предложения приветствуются!
Метод, с которым вы связываетесь, выполняет именно то, что вы хотите: вы передаете функцию, которая преобразует Groupable в Grouping, и делает все остальное. Конечно, для Grouping необходимо правильно реализовать hashCode() и equals(). В чем проблема? Обратите внимание, что это довольно легко сделать с простой картой. –
Хорошо. Я думаю, мне нужно реализовать свои собственные equals(). Это то, чего мне не хватает, поскольку реализация по умолчанию ищет равенство объектов, в то время как я хочу установить равенство в атрибутах объектов. Благодарю. – Angad
Не забудьте реализовать 'hashCode()', который соответствует вашему 'equals()'. –