Java8 с использованием новых возможностей с простым и эффективным кодом для реализации некоторой обработки данных

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

рекомендация

отwww.cnblogs.com/luizw/p/10978188.html