当前位置: 首页 > news >正文

关于Java中**optional,stream,lambda**

关于Java中optional,stream,lambda

  1. Lambda表达式高效使用
// 1. 结合Comparator进行排序
List<Person> persons = Arrays.asList(new Person("John", 25),new Person("Alice", 22),new Person("Bob", 30)
);// 按年龄排序
persons.sort((p1, p2) -> p1.getAge() - p2.getAge());// 2. 事件处理
button.addActionListener(e -> System.out.println("Button clicked"));// 3. 自定义函数式接口使用
@FunctionalInterface
interface MathOperation {int operation(int a, int b);
}// 加法lambda
MathOperation add = (a, b) -> a + b;
// 乘法lambda
MathOperation multiply = (a, b) -> a * b;System.out.println(add.operation(5, 3));      // 输出: 8
System.out.println(multiply.operation(5, 3));  // 输出: 15
  1. Stream API高效使用
List<Person> persons = Arrays.asList(new Person("John", 25, "US", 3000),new Person("Alice", 22, "UK", 4000),new Person("Bob", 30, "US", 5000)
);// 1. 复杂数据处理链
Map<String, Double> avgSalaryByCountry = persons.stream().filter(p -> p.getSalary() > 2000)              // 过滤.collect(Collectors.groupingBy(                  // 分组Person::getCountry,                         Collectors.averagingDouble(Person::getSalary)));// 2. 并行处理大数据集
long count = persons.parallelStream().filter(p -> p.getAge() > 25).count();// 3. 数值统计
DoubleSummaryStatistics salaryStats = persons.stream().mapToDouble(Person::getSalary).summaryStatistics();
System.out.println("Average salary: " + salaryStats.getAverage());
System.out.println("Max salary: " + salaryStats.getMax());// 4. 数据转换和收集
List<String> names = persons.stream().map(Person::getName).collect(Collectors.toList());// 5. 查找和匹配
boolean anyMatch = persons.stream().anyMatch(p -> p.getAge() > 30);
  1. Optional高效使用
public class OptionalDemo {// 1. 优雅处理可能为空的对象public String getCarInsuranceName(Optional<Person> person) {return person.flatMap(Person::getCar).flatMap(Car::getInsurance).map(Insurance::getName).orElse("Unknown");}// 2. 链式调用避免空指针public Optional<String> getUppercaseName(Person person) {return Optional.ofNullable(person).map(Person::getName).map(String::toUpperCase);}// 3. 条件处理public void printNameIfPresent(Optional<String> name) {name.ifPresent(System.out::println);name.ifPresentOrElse(System.out::println,    // 值存在时执行() -> System.out.println("Name not found")  // 值不存在时执行);}// 4. 默认值处理public String getNameWithDefault(Optional<String> name) {return name.orElseGet(() -> "Default Name");  // 延迟加载默认值}// 5. 组合多个Optionalpublic Optional<String> getCombinedName(Optional<String> firstName, Optional<String> lastName) {return firstName.flatMap(f -> lastName.map(l -> f + " " + l));}// 6. 过滤值public Optional<Person> getAdultPerson(Optional<Person> person) {return person.filter(p -> p.getAge() > 18);}
}// 实体类示例
class Person {private String name;private int age;private Optional<Car> car;  // 使用Optional作为字段类型public Optional<Car> getCar() {return car;}
}class Car {private Optional<Insurance> insurance;public Optional<Insurance> getInsurance() {return insurance;}
}class Insurance {private String name;public String getName() {return name;}
}

一些最佳实践建议:

  1. Lambda表达式:
  • 保持简短,复杂逻辑应该提取到方法中
  • 使用方法引用代替简单的lambda表达式
  • 注意避免副作用
  1. Stream API:
  • 对大数据集使用并行流(parallelStream)
  • 使用合适的终端操作(terminal operation)
  • 避免在stream操作中修改外部状态
  • 善用collect操作进行数据收集
  1. Optional:
  • 不要将Optional用作类的字段类型(除非特殊需求)
  • 优先使用Optional的map和flatMap进行链式调用
  • 使用orElseGet代替orElse处理默认值
  • 不要使用Optional.get(),除非确定有值

http://www.mrgr.cn/news/59528.html

相关文章:

  • 秋叶启动器下,如何升级ComfyUI的pytorch版本到2.5
  • 第二十七节 图像的卷积操作
  • 【 IC每日一题】
  • 【LeetCode:263. 丑数 + 数学】
  • ASP.NET Core8.0学习笔记(二十三)——EF Core自引用
  • 4路CAN转WiFi 型号:SG-CANET-410-WiFi
  • 特殊主题短视频资源推荐
  • 好用的骨传导运动耳机有哪些?2024年五款高口碑骨传导耳机分享
  • 100种算法【Python版】第14篇——Pollard‘s Rho 质因数分解算法
  • 10.Linux按键驱动-中断的线程化处理threadirq
  • 【LeetCode热题100】链表
  • 虚拟化平台
  • 《深入浅出HTTPS​​》读书笔记(2):HTTP
  • 【日常知识点】Java 语法糖,你用过几个?
  • 【日常知识点】到底推不推荐用JWT?
  • 007:点云处理软件TrimbleRealWorks12.0安装教程
  • 影刀RPA实战:验证码识别功能指令
  • 【系统架构设计师】案例分析预测试卷一(3道材料题)
  • 实时时钟芯片DS1302在STM32系列使用详解
  • 2025考研各省市网上确认时间汇总!
  • Leetcode11:盛水最多的容器
  • 【C++刷题】力扣-#495-提莫攻击
  • STATCOM静止同步补偿器原理及MATLAB仿真模型
  • 多文档快速合并
  • LeetCode题练习与总结:回文对--336
  • 008:光盘映像文件处理工具UltraISO安装教程