java8 stream()用法

stream().map().collect()用法

List users = getList(); //从数据库查询的用户集合
获取User的身份证号码
用for循环
for(int i=0;i<users.size();i++){
idcards.add(users.get(i).getIdcard());
}
使用stream
List idcards= users.stream().map(User::getIdcard).collect(Collectors.toList())

Collectors.joining 收集器 支持灵活的参数配置,可以指定字符串连接时的 分隔符,前缀 和 后缀 字符串
// 定义人名数组
final String[] names = {“Zebe”, “Hebe”, “Mary”, “July”, “David”};
Stream stream1 = Stream.of(names);
Stream stream2 = Stream.of(names);
Stream stream3 = Stream.of(names);
// 拼接成 [x, y, z] 形式
String result1 = stream1.collect(Collectors.joining(", “, “[”, “]”));
// 拼接成 x | y | z 形式
String result2 = stream2.collect(Collectors.joining(” | “, “”, “”));
// 拼接成 x -> y -> z] 形式
String result3 = stream3.collect(Collectors.joining(” -> ", “”, “”))

其他用法
示例:List

menus=Menu.getMenus.stream().collect(Collectors.toList())
示例:Set menus=Menu.getMenus.stream().collect(Collectors.toSet())
示例:ArrayList menus=Menu.getMenus.stream().collect(Collectors.toCollection(ArrayList::new))
示例:Long count=Menu.getMenus.stream().collect(counting);//计算流中元素个数
示例:Integer count=Menu.getMenus.stream().collect(summingInt(Menu::getCalories))//对流中元素的一个整数属性求和
示例:Double averaging=Menu.getMenus.stream().collect(averagingInt(Menu::getCalories))//计算流中元素integer属性的平均值
示例:String name=Menu.getMenus.stream().map(Menu::getName).collect(joining(“, ”))//连接流中每个元素的toString方法生成的字符串
示例:Optional fattest=Menu.getMenus.stream().collect(maxBy(Menu::getCalories))
//一个包裹了流中按照给定比较器选出的最大元素的optional
如果为空返回的是Optional.empty()
示例:int count=Menu.getMenus.stream().collect(reducing(0,Menu::getCalories,Integer::sum));//从一个作为累加器的初始值开始,利用binaryOperator与流中的元素逐个结合,从而将流归约为单个值
示例:Int count=Menu.getMenus.stream().collect(collectingAndThen(toList(),List::size))//包裹另一个转换器,对其结果应用转换函数
示例:Map<Type,List > menuType=Menu.getMenus.stream().collect(groupingby(Menu::getType))//根据流中元素的某个值对流中的元素进行分组,并将属性值做为结果map的键
示例:Map<Boolean,List > menuType=Menu.getMenus.stream().collect(partitioningBy(Menu::isType));//根据流中每个元素应用谓语的结果来对项目进行分区

总结: 预定义收集器可以用groupby对流中元素进行分组或者用partitioningBy进行分区
收集器可以高效的复合起来,进行多级分组,多级分区和归约
可以自己实现collector接口进行定义自己的收集器

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值