前言
现在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() {
@Override
public 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>() {
@Override
public 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>() {
@Override
public 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()));
网友评论