Apple, определил цель:
общественный класс Apple , {
частный целочисленный идентификатор;
частное имя строки;
частные деньги BigDecimal;
частное Integer Num;
общественное Яблоко (Integer идентификатор, имя String, BigDecimal деньги, Integer Num) {
this.id = идентификатор;
this.name = имя;
this.money = деньги;
this.num = Num;
}
}
添加一些测试数据:
List <Яблоко> appleList = новый ArrayList <> (); //存放яблоко对象集合
Apple , apple1 = Новый Apple (1, "苹果1", новый BigDecimal ( "3,25"), 10);
Apple , apple12 = Новый Apple (1, "苹果2", новый BigDecimal ( "1,35"), 20);
Apple , apple2 = Новый Apple (2, "香蕉", новый BigDecimal ( "2,89"), 30);
Apple , apple3 = Новый Apple (3, "荔枝",
appleList.add (apple1);
appleList.add (apple12);
appleList.add (apple2);
appleList.add (apple3);
1, пакет
объектов списка элементов внутри, сгруппированных в атрибуте, например, к идентификатор пакета, идентификатор одного и того же вместе:
// Список以ID分组Map <Integer, List <Яблоко >>
Map <Integer, List <Яблоко >> группеПо = appleList.stream () сбор (Collectors.groupingBy (Apple :: GetId)).
System.err.println ( "группиЙ:" + группиЙ);
{1 = [Apple {ID = 1, имя = '苹果1', деньги = 3,25, Num = 10}, Apple , {ID = 1, имя = '苹果2', деньги = 1,35, Num = 20}], 2 = [{Apple , J = 2, имя = '香蕉', деньги = 2,89, Num = 30}], 3 = [Apple {ID = 3, имя = '荔枝', деньги = 9,99, Num = 40}]}
2, трансфер карты
вышеупомянутого идентификатора в качестве ключа, яблочного значения объекта, вы можете сделать это:
/ **
* Список -> На этой карте
* Обратите внимание , что:
* объект коллекции toMap , если есть дубликат ключа, будет жаловаться .... Key Дублированный
* apple1, идентификатор apple12 является 1.
* Может быть (k1, k2) -> k1 устанавливается, если есть дубликат ключа, сохраняется key1, отбрасывать key2
* /
карте <Integer, Яблоко> appleMap = appleList.stream () сборным (Collectors.toMap (Яблоко :. : GetId, а -> а, (k1, k2) -> к1));
напечатать appleMap
{1 = Apple , {ID = 1, имя = 'яблоко 1', деньги = 3,25, Num.. = 10}, 2 = Apple , { ID = 2, имя = 'банан', деньги = 2,89, Num = 30}, 3 = {Apple , J = 3, имя = ' личи', деньги = 9,99, Num = 40}}
3, фильтр Фильтр
отфильтрованы из коллекции элементов матчей:
// отображение требуемых данных
List <Яблоко> filterList = appleList.stream ( фильтр) - (а> a.getName () равно ( " сборная (Collectors.toList ()) банан").) ..
Система. err.println ( "FilterList:" FilterList +);
[{Яблоко ID = 2, имя = 'банан', деньги = 2,89, Num = 30}]
4. суммирования
набора данных в соответствии с атрибутом суммирования:
//计算总金额
. BigDecimal totalMoney = appleList.stream () карта (Apple :: Getmoney) .reduce (BigDecimal.ZERO, BigDecimal :: добавить);
System.err.println ( "totalMoney:" + totalMoney); //totalMoney:17.48
5. Найти максимальный и минимальный расход ,
рассчитанный максимального или минимального Collectors.maxBy потока и Collectors.minBy.
Дополнительно <Dish> maxDish = Dish.menu.stream ().
сбор (Collectors.maxBy (Comparator.comparing (Dish :: getCalories)));
maxDish.ifPresent (System.out :: Println);
Дополнительно <Dish> minDish = Dish.menu.stream ().
сбор (Collectors.minBy (Comparator.comparing (Dish :: getCalories)));
minDish.ifPresent (System.out :: Println);
6.去重
импорт статического java.util.Comparator.comparingLong;
импортировать статический java.util.stream.Collectors.collectingAndThen;
импортировать статический java.util.stream.Collectors.toCollection;
//根据идентификатор去重
List <Person> уникальный = appleList.stream () сбор (.
CollectingAndThen (
toCollection (() -> новый TreeSet <> (comparingLong (Apple :: GetId))), ArrayList :: новый)
);
В следующей таблице показана статический класс метод завода Коллекторы.
Фабричный метод возвратного типа роль
ToList List <T> , чтобы передавать все элементы , собранные в списке
toset Комплексе <T> , чтобы передавать все элементы , собранные в набор, удалить дубликаты
toCollection Collection <T> , чтобы передавать все элементы , собранные , чтобы дать установить menuStream.collect (toCollection (), ArrayList :: новый) данный источник питания , чтобы создать
поток подсчета количества элементов в расчете длинных
конвекционной sumInt элементов целого числа атрибутов , суммированных в
среднего averagingInt двойного целого детали расчет свойств потока значение
summarizingInt IntSummaryStatistics собирать статистические данные о элементе свойств Integer потока, таких , как максимум, минимум, сумма и среднего
соединение строки вызова метод соединения каждого элемента в потоке генерируется строка ToString сборной (соединяющий ( «»))
maxBy Необязательного <Т> поток в соответствии с пакетом заданного максимального элемента Факультативный компаратора выбран, или если поток пуст по сравнению Optional.empty ()
minBy Необязательный <T> выбранный поток пакетов в заданном компаратора Дополнительный наименьший элемент, или если поток пуст Optional.empty ()
Восстанавливающие операции по уменьшению типа генерируются в качестве начального значения аккумулятора с начала использования элемента BinaryOperator по отдельности в сочетании потока таким образом , чтобы течь вместе вокруг одного значения накопленного INT TotalCalories = menuStream.collect (снижение (0 , Посудомоечная :: getCalories, Integer :: SUM));
функция преобразования collectingAndThen возвращает тип пакета в другой коллектор, результаты преобразования его применение howManyDishes = menuStream.collect функции Int (collectingAndThen (ToList (), Список :: размера))
groupingBy карты <K , List <T >> установить в качестве Q в соответствии со значением пунктов конвекционных элементов и атрибутов значений атрибутов в результате карты ключа
partitioningBy Карта <булева, List <T >> результаты конвекционного предиката применяется в соответствии с каждым элементом разделить проект
Переход от https://blog.csdn.net/qq_33609401/article/details/84862721