Java 8:那些Java8的常见写法

【1】循环遍历

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

Java 8 以前的写法:

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

Java 8 写法:

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

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

示例:多线程异步打印

Java 8 以前的写法:

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】排序(升序版:从小到大)

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

Java 8 前的写法:

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】排序(降序版本:从大到小)

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

Java 8 前的写法:

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的用户

Java 8 以前的写法:

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】求和

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

Java 8 以前的写法:

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】求最大值

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

Java 8 以前的写法:

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】求最小值

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

Java 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】求平均值

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

Java 8 以前的写法:

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 集合

Java 8 以前的写法:

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 为键

Java 8 以前的写法:

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, o -> o));

 

©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页