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 修饰的方法

posted @ 2017-12-06 19:47  哦克Oak  阅读(1499)  评论(0编辑  收藏  举报