java8新特性总结

Java Stream API 实战技巧
本文详细介绍Java Stream API的各种实用技巧,包括不同类型数据的求和、筛选、分组及排序等操作,帮助开发者高效处理集合数据。

list几种求和方式:
1、list.stream().mapToInt(Entity::getField).sum();//Integer类型求和

2、list.stream().mapToDouble(Entity::getField).sum();//Double类型求和
//计算 总金额(类似四舍五入)
BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
System.err.println(“totalMoney:”+totalMoney); //totalMoney:17.48

3、 list.stream().mapToLong(Entity::getField).sum();//Long类型求和
取出list中某一字段(fileld)的值并转化成list
List fieldList=list.stream().map(Entity::getField).collect(Collectors.toList());
//如需涉及将list转化成数组
String[] array= fieldList.toArray(new String[fieldList.size()]);
过滤list取出符合的数据
1、判断数值型(1、2、3)
List newList= list.stream().filter(Entity-> Entity.getField() == 数值).collect(Collectors.toList());
2、判断时间类的字符串(其它字符串同理)
List newList = list.stream().filter(Entity->sdf.format(Entity.getTime()).equals(“比较的字符 串”)).collect(Collectors.toList());
3、多条件筛选
List newList= list.stream().filter(Entity-> Entity.getStaffNumber().equals(staffNumber) && Entity.getSaltDto().getChineseNameStr().equals(chineseName)&&Entity.getSaltDto().getIdCardStr().equals(idCard)).collect(Collectors.toList());
对list分组的俩种方式
1、分组后带实体
Map<String, List> map = list.stream().collect(Collectors.groupingBy(Entity::getField));
System.err.println(“map :”+map );
{1=[Apple{id=1, name=‘苹果1’, money=3.25, num=10}, Apple{id=1, name=‘苹果2’, money=1.35, num=20}], 2=[Apple{id=2, name=‘香蕉’, money=2.89, num=30}], 3=[Apple{id=3, name=‘荔枝’, money=9.99, num=40}]}
2、另一种
Map<String, List> map = list.stream().collect(Collectors.groupingBy(Entity::getField,Collectors.mapping(Entity::getField, Collectors.toList())));
//如需对map进行操作
for(String key : map.keySet()){
String field= map.get(key).get(0);
}
3、多种属性就行分组(我这里是根据企业名称和时间):

      Map<String, Map<Date, List<TbRemindDto>>> map = newList.stream().collect(Collectors.groupingBy(TbRemindDto::getCompanyName, Collectors.groupingBy(TbRemindDto::getEndTime)));
		map.forEach((key,value)->{
		    //System.out.println("外键"+key+"外部值"+value);
		    value.forEach((key2,value2)->{
		    	String staffStr = "";
		    	for (TbRemindDto remindDto : value2) {
		    		staffStr+=remindDto.getStaffName()+"、";
				}
		    	String companyName = value2.get(0).getCompanyName();
		    	String endTimeStr = DateUtils.format(value2.get(0).getEndTime(), "yyyy-MM-dd");
		    	staffStr = staffStr.substring(0,staffStr.length()-1);
		        //System.out.println("内键"+key2+"内部值"+value2);
		    	EMailUtil.sendNoticeInfoRelatedPersonnel(staffEmail, 6, companyName, endTimeStr,staffStr);
		    });
		});

对list排序
正序
list.sort(Comparator.comparingDouble(Entity::getField);
倒序
list.sort(Comparator.comparingDouble(Entity::getField).reversed());
这些是我最近用到的,如有更好的欢迎一起进步!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值