java8流的用法,平时总结

.有一个集合,想获得其中对象的某个字段结果,变成集合


Set<String> orgCodeList = list.stream()
                .filter(e -> e != null && StringUtils.isNotBlank(e.getOrgCode()))
                .map(DeviceInfoVo::getOrgCode)
                .collect(Collectors.toSet());

把集合中对象的某个字段当做key

在这里插入图片描述

Map<Long, VipEntity> vipMap = vipList.stream().collect(Collectors.toMap(VipEntity::getUserId, v -> v, (v1, v2) -> v1));

说明:

.collect(Collectors.toMap(VipEntity::getUserId, v -> v, (v1, v2) -> v1))

第一个参数 VipEntity::getUserId 表示选择 VipEntity 的 getUserId 作为map的key值;
第二个参数 v -> v 表示选择将原来的对象作为map的value值;
第三个参数 (v1, v2) -> v1 中,如果v1与v2的key值相同,选择v1作为那个key所对应的value值

两个集合的交集

List<List<String>> deviceInfoVoLists=new ArrayList<>();
        List<String> list=new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        List<String> list2=new ArrayList<>();
        list2.add("1");
        list2.add("2");
        list2.add("5");
        list2.add("6");
        deviceInfoVoLists.add(list);
        deviceInfoVoLists.add(list2);

        Optional<List<String>> result = deviceInfoVoLists.parallelStream()
                .filter(deviceInfoVoList -> deviceInfoVoList != null && ((List) deviceInfoVoList).size() != 0)
                .reduce((a, b) -> {
                    a.retainAll(b);
                    return a;
                });
         result.orElse(new ArrayList<>());
        System.out.println(result.toString());
    }

3.key重复的情况,key有可能重复,会跑出异常:java.lang.illegalStateException:Duplicate key.这时候就要在toMap
方法指定当前key冲突时key的选择,这里时第二个key覆盖第一个key
list.stream().collect(Collectors.toMap(Person::getName,Function.identity(),(key1,key2)->key2));

4.根据一个字段或者属性分组也可以直接用groupingby方法

list.list(100).collect(Collectors.groupingBy(Person::getAge));

通过partitioningBy 进行分组

list.limit(100).collect(Collectors.partitioningBy(p-P.getAge()<18));

5.可以把下面代码理解为 把二维数组 变成一个一维数组

  List<String> list = Arrays.asList("a,b,c", "1,2,3","pv");
        Stream<String> s3 = list.stream().flatMap(s -> {
//将每个元素转换成一个stream
            String[] split = s.split(",");
            Stream<String> s2 = Arrays.stream(split);

            return s2;
        });
     s3.forEach(System.out::println); // a b c 1 2 3
一个集合根据对象的字段变成key 分组 
  Map<String, List<WarningInfoDetailsVo>> resultMap = dailyMonitorInfoId.stream()
                .collect(Collectors.groupingBy(r -> r.getAccountId() + "-" + r.getElementTypeId()+"-"+r.getCreateUser()));
//过滤集合的条件 获取符合条件的新集合
        List<User> collect = list.stream().filter(vo -> vo.getAge()>5).collect(Collectors.toList());

//进行去重
        List<DouyinDailyMonitorInfo> lists = douyinDailyMonitorInfos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
                new TreeSet<>(Comparator.comparing(o -> o.getDailyMonitorInfoId() + ";" + o.getElementTypeId() + ";" + o.getProductId()))), ArrayList::new));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值