java集合使用stream流处理数据记录
1.stream
中使用map
,filter
//.map之后还是流,可以转单个元素,也能转成类
List<String> msisdns = detailsVOList
.stream()
.filter(vo->vo.getStatus().equalsIgnoreCase("0"))
.map(CardInfoDetailsVO::getMsisdn).collect(Collectors.toList());
//转成另一个类,不推荐,会不断新建对象
List<XhCardSettingRecord> xhCardSettingRecords = settingRecordList
.stream()
.map(v->{return new XhCardSettingRecord(v.getId(),v.getOperateStatus(),v.getBatchNumber(),v.getJobId());})
.collect(Collectors.toList());
//.filter获取符合条件的流
List<String> msisdns = detailsVOList
.stream()
.filter(vo->vo.getStatus().equalsIgnoreCase("0"))
.map(CardInfoDetailsVO::getMsisdn)
.collect(Collectors.toList());
2.使用Collectors对集合进行互转
//list转map,Collectors.toMap,function.identity是转实体,
Map<String, GenTableColumn> tableColumnMap = tableColumns
.stream()
.collect(Collectors.toMap(GenTableColumn::getColumnName,Function.identity()));
//有重复key,可以在第三个参数使用(oldV,newV)->oldV来进行覆盖操作
//有重复key会转map错误
Map<String,String> iccIdMap = xhCards
.stream()
.collect(Collectors
.toMap(k->XingHanUtils.computeIccid(k.getIccid()),XhCard::getIccid,(oldV,newV)->oldV));
//list转set
Set<String> groupId = groupSmartVoiceVO
.getGroupVoiceInfoList()
.stream()
.map(GroupSmartVoiceVO.GroupVoiceInfo::getGroupId)
.collect(Collectors.toSet());
//收集为list
List<String> msisdns = detailsVOList
.stream()
.filter(vo->vo.getStatus().equalsIgnoreCase("0"))
.map(CardInfoDetailsVO::getMsisdn).collect(Collectors.toList());
3.使用groupingby进行分组
//按照一个其中一个元素进行分组
Map<String,List<XhFlowRecord>> maps= flowList
.stream()
.collect(Collectors.groupingBy(XhFlowRecord::getMsisdn));
//分组后,可以再用Collectors.mapping进行转list操作
Map<String, List<List<GroupMemberInfoVO.GroupMemberInfoListDTO>>> groupMemberMap =
allMemberInfoList
.parallelStream()
.collect(
Collectors
.groupingBy(MemberInfoDTO::getGroupId, Collectors.mapping(MemberInfoDTO::getMemberinfoList, Collectors.toList())));
//分组后,可以再用Collectors.groupingby再次进行分组
Map<String,Map<Integer,Long>> batchNumberStatusNumMap = xhCardSettingRecords
.stream()
.filter(k-> StringUtils.isNotBlank(k.getBatchNumber()))
.collect(Collectors
.groupingBy(XhCardSettingRecord::getBatchNumber
, Collectors.groupingBy(XhCardSettingRecord::getOperateStatus,Collectors.counting())));
4.使用flatMap对List<T>
中包含list类的集合进行操作
@Data
public class BatchChangeCardStatusResultDTO implements Serializable {
private String message;
private String stauts;
private List<BatchChangeCardStatusResult> resultList;
@Data
public static class BatchChangeCardStatusResult implements Serializable{
private String msisdn;
private String jobId;
}
}
//flatMap获取到的是stream,
//例子是Stream<BatchChangeCardStatusResultDTO.BatchChangeCardStatusResult>
//转成流之后能之前那样在进行操作,这次只进行收集操作
List<BatchChangeCardStatusResultDTO.BatchChangeCardStatusResult> jobIdList = results
.stream()
.filter(k->k.getStauts().equalsIgnoreCase(BaseOneLinksVO.SUCCESS))
.flatMap(result->result.getResultList().stream())
.collect(Collectors.toList());
版权声明:本文为kangkanghjk原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。