stream流的用法

前提

@Data
@TableName(value ="psb_user_exchange_record")
public class PsbExchangeRecord  implements Serializable {

    @ApiModelProperty(value = "id")
    @TableId(type = IdType.AUTO)
    private Integer id;

    @ApiModelProperty("用户手机号")
    private String phone;

    @ApiModelProperty("奖品id")
    private Integer prizeId;

    @ApiModelProperty("奖品券号")
    private String marketCfgId;

    @ApiModelProperty("奖品类型 1: 实物 2:流量")
    private String prizeType;

    @ApiModelProperty("奖品名称")
    private String prizeName;

    @ApiModelProperty(value = "创建时间")
    @TableField("create_time")
    private Date createTime;

    @ApiModelProperty(value = "更新时间")
    @TableField("update_time")
    private Date updateTime;


    @ApiModelProperty("商户请求流水(如果要检查券是否发送成功需要该参数)")
    private String merchantOrderSeq;

    @ApiModelProperty("发放的奖券(电信发放)")
    private String grantPrizeTicket;

    @ApiModelProperty("发放状态信息(电信发放)")
    private String grantStatus;

    @ApiModelProperty("发放奖券时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime grantPrizeTime;

    @ApiModelProperty("查询发券状态接口返回")
    private String grantStatusQuery;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
// 获取该用户已经获得的奖品
List<PsbExchangeRecord> userRecord = psbUserExchangeRecordService.list(Wrappers.<PsbExchangeRecord>lambdaQuery()
        .eq(PsbExchangeRecord::getPhone, userPhone)
        .eq(PsbExchangeRecord::getGrantStatus,"000000"));

将list 过滤, 只得到流量奖品名称list集合。
只得到list集合中的某一个字段 如流量的奖品名称。
这是过滤了两次。
filter()的用法 获得与之相等的数据,其它不符合的数据不要

List<String> userPrizeName = userRecord.stream().filter(x -> "2".equals(x.getPrizeType()))
												.map(PsbExchangeRecord::getPrizeName).collect(Collectors.toList());
 List<PsbPrizeStock> collect = stocks.stream().filter(p -> "2".equals(p.getPrizeType()))
 																	.collect(Collectors.toList());

取不是userPrizeName的collect集合,也就是将collect集合中的符合userPrizeName的去除。
通过stream流过滤两个list集合 ,取某一个的差集。

 List<PsbPrizeStock> fakePrize = collect.stream().filter(p -> !userPrizeName.contains(p.getName()))
 																					.collect(Collectors.toList());

总结:
list集合使用stream流过滤数据。

如果只想获得list集合中的某一个字段 用list.stream(). map(字段名) 。
实例:list.stream().map(PsbExchangeRecord::getPrizeName) 只拿到prizeName 字段
是一个List集合。

如果想获得某一个字段并且符合某个条件 如是男生,年龄大于多少 或者小于多少 就用filter
list.filter(x->条件.equals(x.get条件)).map(字段)。
实例:
userRecord.stream().filter(x->“2”.equals(x.getPrizeType())).
map(PsbExchangeRecord::getPrizeName).collect(Collectors.toList());

之所以要写这个笔记 就是因为卡在了 如何用一个list集合过滤另一个list集合。更准确点是用一个list集合中的某一个字段过滤另一个list 集合。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值