List集合是某个实体
//我先给出实体。优惠券的
import lombok.Data;
@Data
public class Coupon {
private Integer couponId;
private Integer price;
private String name;
}
先把对象数据丢进去
public class CouponListTest {
public static void main(String[] args) {
List couponList = new ArrayList<>();
//使用for循环重复设置数据
for (int i =0;i<4;i++){
Coupon coupon = new Coupon();
coupon.setCouponId(i);
coupon.setName("优惠券"+i);
coupon.setPrice(i*100);
couponList.add(coupon);
}
//之所以重新插入一个重复数据是因为后面要合并重复数据
Coupon coupon1 = new Coupon();
coupon1.setCouponId(1);
coupon1.setName("优惠券"+1);
coupon1.setPrice(1*100);
couponList.add(coupon1);
分组
Map> group = couponList.stream().collect(Collectors.groupingBy(Coupon::getCouponId));
System.out.println("分组:"+group);
//已经转换为map集合了,CouponId为key
输出结果:
分组:{0=[Coupon(couponId=0, price=0, name=优惠券0)], 1=[Coupon(couponId=1, price=100, name=优惠券1), Coupon(couponId=1, price=100, name=优惠券1)], 2=[Coupon(couponId=2, price=200, name=优惠券2)], 3=[Coupon(couponId=3, price=300, name=优惠券3)]}
把list的集合里面的多条记录按照指定符号分割
String separate = couponList.stream().map(String::valueOf).collect(Collectors.joining("板鸭"));
System.out.println("分隔:"+separate);
//已经转换为map集合了,按照板鸭字符串分隔
输出结果:
分隔:Coupon(couponId=1, price=100, name=优惠券1)板鸭Coupon(couponId=0, price=0, name=优惠券0)板鸭Coupon(couponId=1, price=100, name=优惠券1)板鸭Coupon(couponId=2, price=200, name=优惠券2)板鸭Coupon(couponId=3, price=300, name=优惠券3)
过滤
List filterList = couponList.stream().filter(coupon -> coupon.getPrice()<200).collect(Collectors.toList());
System.out.println("过滤:"+filterList);
//这里的过滤条件,我设置的是金额要小于200
输出结果:
过滤:[Coupon(couponId=1, price=100, name=优惠券1), Coupon(couponId=0, price=0, name=优惠券0), Coupon(couponId=1, price=100, name=优惠券1)]
过滤转map
Map filterMap = couponList.stream().filter(coupon -> coupon.getPrice()>100).collect(Collectors.toMap(Coupon::getName,Coupon::getPrice));
System.out.println("过滤转map:"+filterMap);
输出结果:
过滤转map:{优惠券3=300, 优惠券2=200}
实现list中对象属性的合并(去重并求和)
List list = couponList.stream().collect(Collectors.toMap(Coupon::getCouponId,coupon -> coupon,(o1,o2)->{
o1.setName(o1.getName()+o2.getName());
o1.setPrice(o1.getPrice()+o2.getPrice());
return o1;
})).values().stream().collect(Collectors.toList());
System.out.println("合并重复数据:"+list);
输出结果:
合并重复数据:[Coupon(couponId=0, price=0, name=优惠券0), Coupon(couponId=1, price=200, name=优惠券1优惠券1), Coupon(couponId=2, price=200, name=优惠券2), Coupon(couponId=3, price=300, name=优惠券3)]