Java Stream

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());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值