Это 19-й день моего участия в ноябрьском испытании обновлений.Подробности о событии:Вызов последнего обновления 2021 г.
🤞 Персональная домашняя страница:@青城Sequencer Stone
🤞 Преимущества вентилятора:Добавить фан-базуОтвечайте на вопросы один на один, получайте бесплатные шаблоны резюме, улучшайте учебные материалы и т. д. и станьте королем новой эры!
над《Java8 | Как изящно инициализировать Map и List2Map? 》Когда дело доходит до инициализации Map и List2Map, многие небольшие партнеры выдвинули множество отличных предложений. В этой статье рассматривается групповая обработка агрегированных данных, которые, вероятно, будут использоваться в фактической разработке, и рассматриваются различные методы решения проблем.
1. Проблемы развития
Группировка данных коллекции довольно распространена в реальном процессе разработки, например, данные о продукте, передаваемые во внешний интерфейс, группируются по типу. Наиболее распространенный способ — просмотреть всю коллекцию, а затем создать коллекцию различных типов, оценивая тип. Так есть ли лучший способ,Java8 groupingBy
может помочь нам.
Так же,
Если у нас есть классProduct
, как показано в коде ниже.
@Getter
@Setter
@ToString
@Builder
class Product{
private Long id;
private String category;
private String name;
private int count;
}
у нас есть сейчасList<Product>
форматировать данные.
static List<Product> getList(){
final List<Product> productList = new ArrayList<>(100);
for(int i =1;i<=100;i++){
productList.add(Product.builder()
.id((long) i)
.name("name"+i)
.category("category"+i%9)
.count(i)
.build());
}
return productList;
}
Затем мы выполняем сложную обработку этих данных.
Во-вторых, простейшая одноколоночная обработка
согласно сcategory
Типы сгруппированы.
final Map<String, List<Product>> maps = productList.stream()
.collect(Collectors.groupingBy(Product::getCategory));
здесь дляCollectors.groupingBy
параметрыFunction<? super T, ? extends K> classifier
Возвращаемое значение как ключ
.
3. После группировки посчитайте общее количество указанных столбцов
согласно сcategory
Типы сгруппированы и подсчитаны для каждого типаcount
Всего.
Map<String, Integer> maps = productList.stream()
.collect(Collectors.groupingBy(Product::getCategory, summingInt(Product::getCount)));
Следуйте приведенному выше коду, чтобы получить сумму из сгруппированных результатов. Выше приведена операция агрегирования. Что делать, если вы хотите выполнить операцию фильтрации, например, просмотреть продукты с наибольшим количеством в группе типов?
использоватьmaxBy(comparingInt(*))
Вот и все.
Map<String, Optional<Product>> maps = productList.stream()
.collect(Collectors.groupingBy(Product::getCategory, maxBy(comparingInt(Product::getCount))));
Использование этих существующих методов JDK для преобразования форматов данных в памяти может значительно повысить эффективность разработки.
Мальчик, ты не можешь видеть достаточно? нажмите на каменьПодробное описание, Просто нажмите и посмотрите, может быть, будут сюрпризы? Добро пожаловать в поддержкуНравится/Подписывайтесь/Комментируйте, ваша поддержка — моя самая большая мотивация для Gengwen, спасибо!