Java8新特性及常用方法
集合 Stream流
(1)分组(比如说某个pojo的某个字段的集合):
List<SysOperatorLogsBean> logsBeans = logsMongoEngine.getBeans(sql);
List<Long> tenantIds = logsBeans.stream().map(SysOperatorLogsBean::getTenantId).distinct().collect(Collectors.toList());
(2)求和操作:
List<Order> orderList = orderDao.findOrdersByUid(user.getUid());
orderList.stream().mapToDouble(Order::getMoney).sum();
List<Bean> list = new ArrayList<>();
BigDecimal sumOfBigDecimals = list.stream().filter(Objects::nonNull).filter(c -> c.getPaidFee() != null).map(Bean::getPaidFee).reduce(BigDecimal.ZERO, BigDecimal::add);
(3)list转化为map:
value为单对象:
Map<Long, UserEntity> collect = userList.stream().collect(Collectors.toMap(UserEntity::getUid, (p) -> p));
value为集合:
Map<Long, List<ProductSkuEntity>> skuListMap = skuEntityList.stream().collect(Collectors.groupingBy(ProductSkuEntity::getProductId, Collectors.toList()));
(4)将对象转为集合
Collections.singletonList(user)
(5)将数组转为集合
Integer[] arrs = new Integer[]{};
Set<Integer> values = new HashSet<>(Arrays.asList(arrs));
(6) 排序
Set<User> result = firstUsers.stream().sorted(Comparator.comparing(User::getCreateTime).reversed()).collect(toList());
(7) 分组聚合 count,类似于 mysql group by count
Map<Long, Long> map = list.stream().collect(Collectors.groupingBy(Bean::getId, Collectors.counting()));
(8) 获取一段时间段内的日期的集合
LocalDate start、end;
List<String> list = Stream.iterate(start, localDate -> localDate.plusDays(1)).limit(ChronoUnit.DAYS.between(start, end) + 1).map(LocalDate::toString).collect(Collectors.toList());
时间:
(1)可以获取当日的0点。连续操作 + - 时分秒以及天数:
Date now = Date.from(LocalDate.now().atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
(2)求本月第一天和最后一天
LocalDate today = LocalDate.now();
LocalDate firstday = LocalDate.of(today.getYear(),today.getMonth(),1);
LocalDate lastDay =today.with(TemporalAdjusters.lastDayOfMonth());
(3)解析、获得 yyyy-MM-dd 及 yyyy-MM-dd HH:mm:ss 格式的时间
String date = "2021-01-29';
LocalDate.parse(date, DateTimeFormatter.ISO_DATE);
String date = "2021-03-03 10:23:22"
LocalDateTime time = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(DateConstant.yyyyMMddHHmmss));
得到当前 yyyy-MM-dd HH:mm:ss 的数据
LocalDateTime.now(ZoneId.of("Asia/Shanghai")).format(DateTimeFormatter.ofPattern(DateConstant.yyyyMMddHHmmss))
Default:
业务上对接了淘宝,天猫,京东,有赞等商城平台,且有一套规范的接口流程,每对接一个平台都可继承此接口,但有些商城开放平台并不提供指定单号抓取的接口,所以问题来了:
default JSONObject getOrderById(String extOrderId);
(1)当你接口中新增一个用default修饰的方法之后可以不必在其实现类中新增其实现,但是必须要在接口中给一个默认的实现.有类似一个接口有多个实现的时候就可以灵活来处理业务流程,
(2)每个接口中只允许有一个default 修饰的方法