java8 对集合的操作,stream流操作

时间:2025-02-18 13:08:06

去重 distinct() 去重;collect(())。封装成集合

List<Person> distinctList = ().distinct().collect(());

collectingAndThen去重(根据对象里面的某个字段进行去重)

List<ProductReq> paperRecordList = ().collect(
        (
                (() -> new TreeSet<>((ProductReq::getProductFullName))), ArrayList::new));

collectingAndThen去重(根据对象里面的多个字段进行去重)

ArrayList<ProductReq> paperRecordList = ().collect(
        (
                (() -> new TreeSet<>((item->()+"_"+()))), ArrayList::new));

去重

去重取旧对象:

List<ProductReq> paperRecordList = new ArrayList<>(().collect((ProductReq :: getProductFullName, (), (oldValue, newValue) -> oldValue)).values());

排序 ?sorted((第一个对象,第二个对象)->返回值) ?(升降序看是第几个对象与第几个对象比较)

List<Person> sortedList = ().sorted((o1,o2)->()-()).collect(());

//按照年龄升序

().sorted((Student::getAge)) 

//按照年龄降序

().sorted((Student::getAge).reversed()) 

排序空字段排在前面

().sorted((l -> (), (Date::compareTo))).collect(toList());

排序空字段排在后面
().sorted((l -> (), (String::compareTo))).collect(toList());

按年龄排序(Integer类型)

List<StudentInfo> studentsSortName = ().sorted((StudentInfo::getAge)).collect(());

排序,按日期倒叙,null日期排在最后
((::getTermOfOfficeStartDate, (())));

过滤 , filter(item->{}) ? item为每一项。 按照自己的需求来筛选list中的数据

List<Person> filterList = ().filter(item->()>3).collect(());

map(), 提取对象中的某一元素. ?用每一项来获得属性(也可以直接用 ?对象::get属性())

List<String> mapList1 = ().map(Person::getName).collect(());

List<String> mapList2 = ().map(item->()).collect(());

统计 sum() 。mapToDouble() 转换成double。还有其他类型转换。可以自己研究。

double sum = ().mapToDouble(Person::getAge).sum();

().mapToDouble(User::getHeight).sum()//和
().mapToDouble(User::getHeight).max()//最大
().mapToDouble(User::getHeight).min()//最小
().mapToDouble(User::getHeight).average()//平均值
BigDecimal quitMoney = ().filter(item -> () == 1).map(SelectListByCustomerIdRsp::getTradeMoney).reduce(, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);

分组 ? (属性名)

Map<Integer, List<Person>> map = ().collect((Person::getAge));

多重分组 (属性,(属性))

Map<String, Map<Integer, List<Person>>> map2 = ().collect((t->(),(t->())));

分组并计算综合 ? ()

Map<String, Map<Integer, LongSummaryStatistics>> map3 = ().collect((t->(),(t->(),(Person::getSize))));

将list转你为map

Map<String, Person> collect = ().collect((Person::getName, (p) -> p));

集合比较的简写方式

((o1,o2)->{return ()-();});

根据筛选条件对list进行过滤

List<ContractVO> filterList = ().filter(item->
        {
            boolean flag =true;
            if((())){
                flag = ().equals(());
            }
            String dept = null == () ? "" : ();
            if ((())){
                flag = (())&&flag;
            }
            String manager = null == () ? "" : ();
            if ((())){
                flag = (())&&flag;
            }
            BigDecimal balance = null == () ? :();
            if (null != ()){
                flag = (())>=0&&flag;
            }
            if (null != ()){
                flag = (())<=0&&flag;
            }
            int invalidDays = null == () ? 0 : ();
            if (null != ()){
                flag = invalidDays>=()&&flag;
            }
            if (null != ()){
                flag = invalidDays<=()&&flag;
            }
            return flag;
        }
).collect(());
}

计算求和

().map(vo -> (()) ? new BigDecimal(0) : ()).reduce(, BigDecimal::add);

String转List<Long>

  ((",")).map(s -> (())).collect(());

字符转转集合同时进行数据类型转换

List<Long> strings = ((",")).map(Long::parseLong).collect(());