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

Java 8 的那些常见写法

前言

现在Java已经发展到Java19版本了,由于Java后面一些版本,就开始商用收费了,所以目前绝大多数公司的JDK版本都是采用的之前稳定且免费的1.8版本,也就是Java8,这个版本已经能满足几乎所有业务的需求开发了,下面我列举几个Java8中的一些常见写法。

1. 循环遍历

示例:循环打印集合对象信息

常规写法:

for (User user : users) {System.out.println(user.toString());
}

Java 8 写法:

users.forEach(o -> System.out.println(o.toString()));

2. 函数式接口:匿名内部类

示例:多线程异步打印

常规写法:

new Thread(new Runnable() {@Overridepublic void run() {System.out.println("hello world");}
}).start();

Java 8 写法:

new Thread(() -> System.out.println("hello world")).start();

3. 排序(升序版:从小到大)

示例:用户年龄小到大排序

常规写法:

Collections.sort(userList, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {return o1.getAge() - o2.getAge();}
});

Java 8 写法1:基础版

Collections.sort(userList, (o1, o2) -> o1.getAge() - o2.getAge());

Java 8 写法2:进阶版

Collections.sort(userList, Comparator.comparingInt(User::getAge));

Java 8 写法3:终极版

userList.sort(Comparator.comparingInt(User::getAge));

【注】数值比较可以直接相减排序,非数值比较请用 compareTo() 方法。
【如】 return o1.getName().compareTo(o2.getName());

4. 排序(降序版:从大到小)

示例:用户年龄小到大排序

常规写法:

Collections.sort(userList, new Comparator<User>() {@Overridepublic int compare(User o1, User o2) {return o2.getAge() - o1.getAge();}
});

Java 8 写法1:基础版

Collections.sort(userList, (o1, o2) -> o2.getAge() - o1.getAge());

Java 8 写法2:终极版

userList.sort((o1, o2) -> o2.getAge() - o1.getAge());

5. 过滤

示例:过滤年龄小于18的用户

常规写法:

List<User> users = new ArrayList<>();
for(User u: userList){if (u.getAge() < 18) {users.add(u);}
}

Java 8 写法:

List<User> users = userList.stream().filter(u -> u.getAge() < 18).collect(Collectors.toList());

6. 求和

示例:求所有用户的年龄总和

常规写法:

int sum = 0;
for(User u: userList){sum += u.getAge();
}
System.out.println("年龄总和 : " + sum);

Java 8 写法:

int sum = userList.stream().mapToInt(User::getAge).sum();
System.out.println("年龄总和 : " + sum);

7. 求最大值

示例:求所有用户中最大年龄

常规写法:

int maxAge = 0;
for(User u: userList){if (u.getAge() > maxAge) {maxAge = u.getAge();}
}
System.out.println("最大年龄 : " + maxAge);

Java 8 写法:

int maxAge = userList.stream().mapToInt(User::getAge).max().getAsInt();
System.out.println("最大年龄 : " + maxAge);

8. 求最小值

示例:求所有用户中最小年龄

常规写法:

int maxAge = Integer.MAX_VALUE;
for(User u: userList){if (u.getAge() < maxAge) {maxAge = u.getAge();}
}
System.out.println("最小年龄 : " + maxAge);

Java 8 写法:

int minAge = userList.stream().mapToInt(User::getAge).min().getAsInt();
System.out.println("最小年龄 : " + minAge);

9. 求平均值

示例:求所有用户平均年龄

常规写法:

int sum = 0;
int size = userList.size();
for(User u: userList){sum += u.getAge();
}
double aveAge = (double) sum / size;
System.out.println("平均年龄 : " + aveAge);

Java 8 写法:

double aveAge = userList.stream().mapToInt(User::getAge).average().getAsDouble();
System.out.println("平均年龄 : " + aveAge);

10. 获取属性集合

示例:获取所有用户的 id 集合

常规写法:

List<Long> ids = new ArrayList<>();
for(User u: userList){ids.add(u.getId());
}

Java 8 写法:

List<Long> ids = userList.stream().map(User::getId).collect(Collectors.toList());

11. List 转 Map

示例:将所有用户 List 集合转为 Map 集合,且 id 为键

常规写法:

Map<Long, User> userMap = new HashMap<Long, User>();
for (User user : users) {userMap.put(user.getId(), user);
}

Java 8 写法:

Map<Long, User> userMap = users.stream().collect(Collectors.toMap(User::getId, Function.identity
http://www.lryc.cn/news/13911.html

相关文章:

  • PyQt5数据库开发1 4.3 QSqlTableModel 之 相关槽函数的实现(多图长文详解)
  • QT 设计一个串口调试工具,用一个工程就能轻松解决,外加虚拟串口工具模拟调试,在日常工作中可类比模块间通信,非常详细建议收藏
  • OpenSumi 是信创开发云的首选
  • JdbcTemplate常用方法解析
  • 生物素标记试剂1869922-24-6,Alkyne-PEG3-Biotin PC,炔烃PEG3生物素PC
  • CS224W课程学习笔记(三):DeepWalk算法原理与说明
  • rk3568 开发板Ubuntu系统说明
  • Windows和Linux常用HASH算法使用命令
  • 货仓选址 AcWing(JAVA)
  • SPI+DMA传输性能比较
  • Centos7系统编译Hadoop3.3.4
  • pb并发控制
  • 登录拦截器
  • STM32 - HAL库UART串口
  • Vue3 的状态管理库(Pinia)
  • 信息系统项目管理师知识点汇总(2023最新)
  • 标题标题标题
  • OKR学习总结二
  • MAC中docker搭建fastdfs
  • JavaScript 变量
  • 【前端验证】环境仿真中对于寄存器配置的随机策略讨论
  • Servlet如何读取Web资源文件?【操作演示】
  • [ vulhub漏洞复现篇 ] Drupal 远程代码执行漏洞(CVE-2019-6339)
  • flex-shrink和felx-grow
  • 将HTTP接口配置成HTTPS
  • YOLOV5报错解决办法
  • java final关键字 详解
  • Vbs_To_Exe制作简易exe程序
  • AI制药 - TMScore(US-align)、RMSD、Sequence 源码
  • 关于个人的经历