java stream流api

java1.8及之后的版本,对集合的操作用Java stream ,结合lamda表达式,更方便,简洁了,大大减少开发的代码量

现在说下一次stream处理分为三个阶段:

输入流:就是一个常用的集合,或者变量可以转化成流的方式进行处理

中间流:就是在流处理的过程,对流进行转换,生成一个新的流

终端流:即对流来进行消费,消费完了就结束了

1、对List的操作

加入对以下list进行处理:

List<Person> personList = new ArrayList<>();
personList.add(new Person("yang","cai"));
personList.add(new Person("yang","fen"));
personList.add(new Person("yang","feng"));

1、刷选/过滤(使用filter关键字)

personList.stream().filter(x->x.getLastName().equals("cai")).collect(Collectors.toList());

2、分组(使用collect,groupingBy关键字)

//简单分组
personList.stream().collect(Collectors.groupingBy(Person::getLastName));

//分组求count 
personList.stream().collect(Collectors.groupingBy(Person::getFirstName,Collectors.counting()));

//分组求和,求平均,最大,最小值,求count
personList.stream().collect(Collectors.groupingBy(Person::getFirstName,Collectors.summarizingInt(Person::getPersonId)))
打印结果为:
{yang=IntSummaryStatistics{count=3, sum=6, min=1, average=2.000000, max=3}}

3、合并(使用flatMap关键字,这里要主要flatMap跟Map的区别)

//两个相同实体之间的合并

List<Person> personList = new ArrayList<>();
personList.add(new Person("yang","cai"));
personList.add(new Person("yang","fen"));
personList.add(new Person("yang","feng"));

List<Person> personList1 = new ArrayList<>();
personList.add(new Person("wang","de"));
personList.add(new Person("wang","qing"));
personList.add(new Person("wang","er"));

List<Person>  list = Stream.of(personList,personList1).flatMap(Collection::stream).collect(Collectors.toList());//会把两个list的值合并

//两个不同实体之间的合并

List<Person> personList = new ArrayList<>();
personList.add(new Person(1,"yang","cai"));
personList.add(new Person(2,"yang","fen"));
personList.add(new Person(3,"yang","feng"));
List<Area> areaList = new ArrayList<>();
areaList.add(new Area(1,"广东","深圳"));
areaList.add(new Area(2,"福建","南平"));
areaList.add(new Area(3,"广东","广州"));
List<PersonArea> list = personList.stream().flatMap(x->areaList.stream()
          .filter(y->y.personId==x.personId)
             .map(z->new PersonArea(x.personId,x.firstName.concat(x.lastName),z.province.concat(z.city))))
          .collect(Collectors.toList());
System.out.println(list);

打印结果为:

[PersonArea{personId=1, name='yangcai', addr='广东深圳'}, PersonArea{personId=2, name='yangfen', addr='福建南平'}, PersonArea{personId=3, name='yangfeng', addr='广东广州'}]

4、排序(使用sorted关键字)

personList.stream().sorted(Comparator.comparing(Person::getLastName)).collect(Collectors.toList());

5、取部分元素,重新生成新的list (使用map关键字)

personList.stream().map(Person::getLastName).collect(Collectors.toList());

6、遍历

personList.stream().forEach(System.out::println);

7、list 转 map

Map<Integer,String> listToMap = personList.stream().collect(Collectors.toMap(Person::getPersonId,Person::getLastName));

2、对Map的操作

Map<Person,Area> map = new HashMap<>();
map.put(new Person(1,"yang","cai"),(new Area(1,"广东","深圳")));
map.put(new Person(2,"yang","fen"),(new Area(2,"广东","广州")));
map.put(new Person(3,"yang","yao"),(new Area(3,"广东","东莞")));

1、过滤:(可以针对 map的key,value分别过滤)

map.entrySet().stream().filter(x->x.getKey().personId==1).collect(Collectors.toList());

2、遍历:用forEach关键字

map.forEach((k,v)->{ -------------------代码块----------------   });

3、对Set的操作 (跟list类似)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值