java api例子_Java 8 Stream API实例

一、开篇

Stream?其实就是处理集合的一种形式,称之为流,在Java8中被引入,可被Collection中的子类调用。

作用?简化代码,提升你的开发效率。

不会?看完这篇你就能自己上手了!

二、实例

首先将你的集合处理成流,才可以使用此API。

Stream stream = list.stream();

接下来创建一个String类型的List,便于测试。

List list = new ArrayList();

list.add(1);

list.add(2);

list.add(3);

list.add(7);

list.add(4);

list.add(6);

接下来展示具体参数使用方式。

filter 过滤

例:需要过滤出在集合中,大于5的数字的集合。

List result = list.stream().filter(o -> o>5).collect(Collectors.toList());

filter内部使用的是lamda表达式,也是Java8的功能,o代表集合中每一个元素,o>5表示这个元素的值若大于5就返回true,就获取结果。collect表示聚合,Collectors.toList()表示将结果聚合到一个List集合。

map 形成一个新对象

例:需要将集合内的元素全部转换成String类型。

List result = list.stream().map(o->String.valueOf(o)).collect(Collectors.toList());

sort 排序

例: 需要从小到大排序。

List result = list.stream().sorted().collect(Collectors.toList());

例: 需要从大到小排序。

List result = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());

forEach 遍历

例: 打印集合内每个元素。

list.stream().forEach(o->System.out.println(o));

list.forEach(o->System.out.println(o));

distinct 去除重复元素

List result = list.stream().distinct().collect(Collectors.toList());

reduce 集合内运算

例: 计算集合中元素的和。

Integer sum = list.stream().reduce(0, (i, j) -> i + j);

reduce中第一个参数为基数,即为初始值,i,j的定义为第一个和第二个操作数,i+j即为操作,此处为加法操作。

如果计算乘法,就不能设置初始值为0,因为0乘任何数都为0。

collect 聚合成Collection

Collectors.toMap(Function super T, ? extends K> keyMapper, Function super T, ? extends U> valueMapper)

Collectors.toList()

Collectors.toSet()

...

例: 将list聚合成一个key为元素,value为“item”+元素的Map。

Map map = list.stream().collect(Collectors.toMap(Function.identity(), o -> String.format("item%s", o)));

结果:{1=item1, 2=item2, 3=item3, 4=item4, 6=item6, 7=item7}

keyMapper表示设置为key的规则,valueMapper表示设置为value的规则。

Function.identity()表示当前本身元素。

groupBy 分组

Collectors.groupingBy(Function super T, ? extends K> classifier)

新建一个User实体,有姓名和年龄两个字段,并初始化一个集合便于测试。

List list = new ArrayList();

list.add(new User("与李", 18));

list.add(new User("CSDN", 19));

list.add(new User("han", 20));

list.add(new User("han", 21));

例: 需要把名字相同的实体提出来放在一起,形成一个List集合。

Map> group = list.stream().collect(Collectors.groupingBy(User::getName));

结果:{han=[User [name=han, age=20], User [name=han, age=21]], CSDN=[User [name=CSDN, age=19]], 与李=[User [name=与李, age=18]]}

此处使用User实体的name属性进行分组。

User::getName 与 o -> o.getName() 含义相同,两者皆可传入。

partitioningBy 分区

Collectors.partitioningBy(Predicate super T> predicate)

例: 分别统计年龄大于等于20和小于20的学生信息

Map> partitioning = list.stream().collect(Collectors.partitioningBy(o -> o.getAge() >= 20));

结果:{false=[User [name=与李, age=18], User [name=CSDN, age=19]], true=[User [name=han, age=20], User [name=han, age=21]]}

可以看到返回结果是一个Map,利用partitioningBy后生成的map,有且仅有两个元素,key固定为true和false,分别表示满足条件的信息和不不满足条件的信息。

三、结尾

此文列举了Stream部分方法的使用,具体更多的方法需要自己去深入了解。通过熟悉使用Stream的api之后,你会对它的处理方式爱不释手。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值