美文网首页
Java 8 的那些常见写法

Java 8 的那些常见写法

作者: 分布式与微服务 | 来源:发表于2023-02-19 09:31 被阅读0次

    前言

    现在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()));
    

    相关文章

      网友评论

          本文标题:Java 8 的那些常见写法

          本文链接:https://www.haomeiwen.com/subject/lyjgartx.html