java集合使用stream流处理数据记录
1.stream
中使用map
,filter
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());
List<String> msisdns = detailsVOList
.stream()
.filter(vo->vo.getStatus().equalsIgnoreCase("0"))
.map(CardInfoDetailsVO::getMsisdn)
.collect(Collectors.toList());
2.使用Collectors对集合进行互转
Map<String, GenTableColumn> tableColumnMap = tableColumns
.stream()
.collect(Collectors.toMap(GenTableColumn::getColumnName,Function.identity()));
Map<String,String> iccIdMap = xhCards
.stream()
.collect(Collectors
.toMap(k->XingHanUtils.computeIccid(k.getIccid()),XhCard::getIccid,(oldV,newV)->oldV));
Set<String> groupId = groupSmartVoiceVO
.getGroupVoiceInfoList()
.stream()
.map(GroupSmartVoiceVO.GroupVoiceInfo::getGroupId)
.collect(Collectors.toSet());
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));
Map<String, List<List<GroupMemberInfoVO.GroupMemberInfoListDTO>>> groupMemberMap =
allMemberInfoList
.parallelStream()
.collect(
Collectors
.groupingBy(MemberInfoDTO::getGroupId, Collectors.mapping(MemberInfoDTO::getMemberinfoList, Collectors.toList())));
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;
}
}
List<BatchChangeCardStatusResultDTO.BatchChangeCardStatusResult> jobIdList = results
.stream()
.filter(k->k.getStauts().equalsIgnoreCase(BaseOneLinksVO.SUCCESS))
.flatMap(result->result.getResultList().stream())
.collect(Collectors.toList());