jdk8 stream用法实例总结(三)

map作用:

Stream接口中的map函数:

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

stream().map用法---(map是用来映射数据的,获取某一字段的集合封装陈哥list )

map入参格式:

一般格式:

/**
* 把属性当参数传递到方法中,由compose,andThen,identity方法去处理过滤入参字段的值。
* 传参使用: Object :: getPropertyName
*/

   default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
       Objects.requireNonNull(after);
       return (T t) -> after.apply(apply(t));
   }

用例:

1.map过滤的一般使用(过滤字段为MAP类型)

List<Map<String, String>> paramsMap = requestList.stream().map(Request::getParamsMap).collect(Collectors.toList());

        此处遍历获取结构为Request的requestList的ParamsMap字段组成list,其中getParamsMap拿到的是Map<String, String>结构,其key,value均为string类型

2.map过滤的一般使用(过滤字段为String类型)

List<String> phones = requestList.stream().map(Request::getPhoneNums).collect(Collectors.toList());

        此处遍历获取结构为Request的requestList的PhoneNums字段组装成list,其中getPhoneNums拿到的是string类型,因此输出的流是List<String>

3.map结合distinct过滤使用(过滤字段为String类型)

List<String> cidList = userEntities.stream().map(UserEntity::getId).distinct().collect(Collectors.toList());

        此处遍历获取结构为UserEntity的userEntities的Id字段组装成list,并根据Id进行了distinct()去重,其中getId拿到的是string类型,因此输出的流是List<String>

4.map结合JSON.parseObject过滤使用

List<Data> test = logEntities.stream().map(x -> JSON.parseObject(x.getRequest(), BaseDownstreamData.class)).collect(Collectors.toList());

        此处存在两种结构---遍历获取结构为LogEntity的logEntities的Request字符串,并按照Data结构进行解析,如果有相同字段则进行解析,否则抛异常,最终返回Data结构的list

5.map复杂形式的set值使用(注意结构---return v)

list.stream().map(v -> {
    String img = v.getImg();
    if (StringUtils.isNotBlank(img ) && img.contains(Constants.BACKSLASH)) {
    //此处通过lastIndexOf方法从右往左取字符串,根据substring方法加载取到的字符串,并通过concat方法将其连接到imgPath中
        v.setLinkImg(imgPath.concat(img.substring(img.lastIndexOf("/"))));
    }
    return v;
}).collect(Collectors.toList());

        此处是使用map过滤需要的字段的一般用法,v是list类型得到形参, -> 指向后面的逻辑
根据map的getImg字段过滤list,并对每一条数据的Img进行set更新img,最终 return v返回整条数据转换成list给list

6.map复杂形式的set值使用2(注意结构---return v)

List<Request> requestList = list.stream().map(v -> {
    Request request = setRequest(inser, id, msgList, v.getUid(),
            v.getUUid(), v.getName());
    return request;
}).collect(Collectors.toList());

        此处list中包含多组Uid,uuID和Name,但是需要更新inser, id, msgList。因此进行了如下操作,对于list的每一组数据,都插入入参数据,最后组装并通过Collectors.toList()返回给requestList

7.map结合filter的使用(filter与map前后关系取决于逻辑需求)

List<String> list = userEntities.stream().map(Entity::getId).filter(StringUtils::isNotBlank).collect(Collectors.toList());

        此处对userEntities进行遍历拿到id,并通过filter过滤掉其中id为空的情况,最终将非空的cd组装成list

ps:

下一章节将会对比filter()与map()

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值