Java Stream流学习使用

学习效果在这里插入图片描述

一、数据准备

1、类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author lt
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RadiusAppIncrementalItemModel implements Comparable<RadiusAppIncrementalItemModel> {
    private String name;
    private String typeName;
    private long value;
    private double rate;
    private long time;

    @Override
    public int compareTo(RadiusAppIncrementalItemModel o) {
        return (int) (o.time - this.time);
    }
}

2、数据

private static  List<RadiusAppIncrementalItemModel> outAllDataList = new ArrayList<>();

    static {
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel1 = new RadiusAppIncrementalItemModel("vpn","",10,0,20220405);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel2 = new RadiusAppIncrementalItemModel("vpn","",5,0,20220406);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel3 = new RadiusAppIncrementalItemModel("vpn","",4,0,20220407);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel4 = new RadiusAppIncrementalItemModel("vpn","",2,0,20220408);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel5 = new RadiusAppIncrementalItemModel("vpn","",4,0,20220409);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel6 = new RadiusAppIncrementalItemModel("vpn","",10,0,20220410);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel7 = new RadiusAppIncrementalItemModel("vpn","",10,0,20220411);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel8 = new RadiusAppIncrementalItemModel("vpn","",8,0,20220412);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel9 = new RadiusAppIncrementalItemModel("vpn","",4,0,20220413);

        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel11 = new RadiusAppIncrementalItemModel("QQ","qq",5,0,20220405);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel21 = new RadiusAppIncrementalItemModel("QQ","qq",4,0,20220406);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel31 = new RadiusAppIncrementalItemModel("QQ","qq",2,0,20220407);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel41 = new RadiusAppIncrementalItemModel("QQ","qq",4,0,20220408);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel51 = new RadiusAppIncrementalItemModel("QQ","",10,0,20220409);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel61 = new RadiusAppIncrementalItemModel("QQ","",5,0,20220410);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel71 = new RadiusAppIncrementalItemModel("QQ","",4,0,20220411);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel81 = new RadiusAppIncrementalItemModel("QQ","",2,0,20220412);
        RadiusAppIncrementalItemModel radiusAppIncrementalItemModel91 = new RadiusAppIncrementalItemModel("QQ","",1,0,20220413);

        outAllDataList.add(radiusAppIncrementalItemModel1);
        outAllDataList.add(radiusAppIncrementalItemModel2);
        outAllDataList.add(radiusAppIncrementalItemModel3);
        outAllDataList.add(radiusAppIncrementalItemModel4);
        outAllDataList.add(radiusAppIncrementalItemModel5);
        outAllDataList.add(radiusAppIncrementalItemModel6);
        outAllDataList.add(radiusAppIncrementalItemModel7);
        outAllDataList.add(radiusAppIncrementalItemModel8);
        outAllDataList.add(radiusAppIncrementalItemModel9);
        outAllDataList.add(radiusAppIncrementalItemModel11);
        outAllDataList.add(radiusAppIncrementalItemModel21);
        outAllDataList.add(radiusAppIncrementalItemModel31);
        outAllDataList.add(radiusAppIncrementalItemModel41);
        outAllDataList.add(radiusAppIncrementalItemModel51);
        outAllDataList.add(radiusAppIncrementalItemModel61);
        outAllDataList.add(radiusAppIncrementalItemModel71);
        outAllDataList.add(radiusAppIncrementalItemModel81);
        outAllDataList.add(radiusAppIncrementalItemModel91);

    }

二、开始学习

1、使用stream将多个相同名称name合并成一个,并求合并后的value之和

List<RadiusAppIncrementalItemModel> lists = outAllDataList.stream().collect(Collectors.toMap(RadiusAppIncrementalItemModel::getName, a->a,(o1, o2)->{
            o1.setValue(o1.getValue()+o2.getValue());
            return o1;
        })).values().stream().collect(Collectors.toList());
        System.out.println("1、stream合并相同名称后value之和:"+lists);

2、使用stream获取应用名称后,去重

List<String> AppNameLists = lists.stream().map(RadiusAppIncrementalItemModel::getName).collect(Collectors.toList());
        Set<String> nameSet = Sets.newHashSet();
        nameSet.addAll(AppNameLists);
        System.out.println("2、stream获取应用名称后,去重:"+nameSet);

3、使用stream求集合value之和

long sum = lists.stream().mapToLong(RadiusAppIncrementalItemModel::getValue).sum();
        System.out.println("3、stream求集合value之和:"+sum);

4、使用stream根据类型名称聚合

Map<String, List<RadiusAppIncrementalItemModel>> collect = outAllDataList.stream().collect(Collectors.groupingBy(RadiusAppIncrementalItemModel::getTypeName));
        System.out.println("4、stream根据类型名称聚合:"+collect);

5、使用stream过滤类型为空的数据

List<RadiusAppIncrementalItemModel> longMap = outAllDataList.stream().filter(s -> s.getTypeName() != null || s.getTypeName() != "").collect(Collectors.toList());
        System.out.println("5、stream过滤类型为空的数据:"+longMap);

6、使用stream对名称相同的数累加,作用同1

Map<String, Long> lists2 = outAllDataList.stream().collect(Collectors.groupingBy(s -> s.getName().toString(), Collectors.summingLong(s -> s.getValue())));
        System.out.println("6、stream对名称相同的数累加,作用同1:"+lists2);

7、使用stream将多个相同名称name合并成一个,并求合并后的value之和

List<RadiusAppIncrementalItemModel> lists = outAllDataList.stream().collect(Collectors.toMap(RadiusAppIncrementalItemModel::getName, a->a,(o1, o2)->{
            o1.setValue(o1.getValue()+o2.getValue());
            return o1;
        })).values().stream().collect(Collectors.toList());
        System.out.println("1、stream合并相同名称后value之和:"+lists);

8、使用stream获取应用名称后,去重,作用同2

 List<String> name = outAllDataList.stream().map(product -> "'" + product.getName() + "'").distinct().collect(Collectors.toList());
        System.out.println("8、stream获取应用名称后,去重,作用同2:"+ name);

9、使用stream指定字段排序

lists=outAllDataList.stream().sorted(Comparator.comparing(RadiusAppIncrementalItemModel::getValue).reversed()).collect(Collectors.toList());
        System.out.println("9、stream指定字段排序:"+lists);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值