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()