好文章:
1.流的使用:https://mp.weixin.qq.com/s/Y1n8BFBKrrhf-D-skP7ZGQ
一。Lambda
1.基础的map遍历:
HashMap<String, String> map = new HashMap<>();
map.put("a","1");
map.put("b","2");
map.put("c","3");
map.put("d","4");
for (String key:map.keySet()) {
System.out.println("k="+key+", v="+map.get(key));
}
map.forEach((k,v) -> {
System.out.println("k="+k+", v="+map.get(k) +"--------"+v);
});
map.forEach((k,v) -> {
if("d".equals(k)){
System.out.println("k="+k+", v="+v );
}
});
2.List使用:
二.Stream使用
1.list中简单使用
List<String> list = Arrays.asList("张三", "李四", "王五", "xuwujing");
List<String> collect = list.stream().filter(s -> !"李四".equals(s)).collect(Collectors.toList());
三。时间LocalDate
提供了很多时间的方法,这个只要想到时间。就可以百度看具体的提供方法使用
//获取本地日期
LocalDate now = LocalDate.now();
System.out.println(now);
LocalDateTime now1 = LocalDateTime.now();
System.out.println(now1);
System.out.println(now1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
System.out.println(now1.plusDays(5));//后五天的时间
//localDate提供了很多关于时间的方法,需要结合业务。都可以查到时间对应的method
四。demo
ArrayList<String> strings = new ArrayList<> ();
strings.add ("asd11");
strings.add ("vsda3");
strings.add ("bsdfa434");
//1.fitter过滤 foreach是一个最终操作后续是不能使用其他的stream的
strings.stream ().filter ((x)->x.startsWith ("a")).forEach (System.out::println);//asd11
//2.sort排序 需要注意的是,排序只创建了一个排列好后的Stream,而不会影响原有的数据源,排序之后原数据strings是不会被修改的
strings.stream ().sorted ().filter (x->x.equals ("asd11")).forEach (System.out::println);//asd11
//3.map提供了很多可以处理数据的方法
strings.stream ().map (String::toUpperCase).sorted ((a,b)->b.compareTo (a)).forEach (System.out::println);//VSDA3 BSDFA434 ASD11
strings.stream ().map (String::length).limit (5).forEach (System.out::println);//5 5 8
//4.match 提供了判断boolean类型的值
boolean test01 = strings.stream ().anyMatch (x->x.startsWith ("v"));
System.out.println (test01);//true
boolean b = strings.stream ().allMatch (x -> x.startsWith ("bsdfa434"));
System.out.println (b);//false
//5.count 计算 最终操作
long b1 = strings.stream ().filter (x -> x.startsWith ("b")).count ();
System.out.println (b1);
}
@Data
public class Person{
String name;
String age;
}
/**
* 方法抽取-- 获取今日已核销订单数量(以核销码为维度统计)
* 今日已核销订单统计(如果一个单子多个码,有一个未核销则归属未核销)
* @param code
* @return
*/
private int getTodayConsumeCount(ConsumeCodeEntity code) {
List<ConsumeCodeEntity> consumeCodeEntities = this.orderConsumeTotal(code);
if (CollectionUtils.isEmpty(consumeCodeEntities)) {
return 0;
} else {
//今日订单统计。通过orderId聚合订单数量(一个订单存在对应多个核销码,但是查出来的是所有核销码数据,所以需要处理结果集group by orderId)
Map<String, List<ConsumeCodeEntity>> collect = consumeCodeEntities.stream().collect(Collectors.groupingBy(ConsumeCodeEntity::getOrderId));
//今日已核销订单统计(如果一个单子多个码,有一个未核销则归属未核销)
int[] a = {0};
collect.forEach((k, v) -> {
if (v.stream().allMatch(this::isConsume)) {
a[0]++;
}
});
return consumeCodeEntities.size();
}
}
private boolean isConsume(ConsumeCodeEntity entity) {
return ConsumeCodeStatusEnum.CONSUMED.getCode().equals(entity.getCodeStatus());
}
@Override
public List<MonthlyAssessmentEntity> findByStoreIds(List<Long> storeIds, String tte) {
return Optional.ofNullable(storeIds).map(s -> {
String preDay = StringUtils.isBlank(tte) ? LocalDateUtils.preDayYMR() : tte;
log.info("月累计评价数据查询 storeIds:{} tte {}",storeIds,preDay);
return monthlyAssessmentDao.queryByStoreIdsAndTte(s, preDay);
}).orElse(Lists.newArrayList());
}