跳至主要內容

Java8新特性-整理汇总

晨光-向小于 1 分钟JavaJava语言

1. Optional

Java 8 Optional 最佳实践open in new window 😈

Optional实现优雅判空open in new window

Optional和ifPresent进行判空处理open in new window

使用Optional.of、ofNullable、orElse、orElseGet遇到的坑open in new window

2. Stream

2.1 flatMap

Java 8 Steam API map和flatMap方法使用详解open in new window

  1. 简化代码
List<Klass> result2 = new ArrayList<>();
for (KlassGroup group : groupList) {
    for (Klass klass : group.getKlassList()) {
        result2.add(klass);
    }
}

但是这种套了两层for循环的代码太丑陋了。面对这种需求,flatMap可以大展身手了

List<Klass> result3 = groupList.stream()
        .flatMap(it -> it.getKlassList().stream())
        .collect(Collectors.toList());

Java8使用流从类对象中提取多个字段open in new window

list.stream().flatMap(a -> Stream.of(a.getNumber1(),a.getNumber2())).distinct()...

2.2 reduce

java1.8新特性之stream流中reduce()求和open in new window

Stream.reduce()合并流,如BigDecimal 的add求和open in new window

3. 排序

stream流倒序排序_java8 stream多字段排序open in new window

扩展

去重 😈

// 去重 根据工单类型dictBillServiceTypeId
List<Map<String, Object>> settleOnlyConfigList = todayAllBillList.stream().collect(
        Collectors.collectingAndThen(
                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.get("dictBillServiceTypeId").toString()))), ArrayList::new)
);

Java如何实现去重?这是在炫技吗? - 掘金 (juejin.cn)open in new window 😄