【Java8新特性】揭开System.out::println的神秘面纱

简介: 本篇文章带你揭开System.out::println的神秘面纱!
【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行!

博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、数据库、项目案例等相关知识点总结,感谢你的阅读和关注,希望我的博客能帮助到更多的人,分享获取新知,大家一起进步!

吾等采石之人,应怀大教堂之心,愿大家奔赴在各自的热爱里…

一、文章序言

第一次看到这个输出语句还是觉得挺有趣的,本篇文章带你揭开System.out::println的神秘面纱

     List<String> nameList = Arrays.asList("辰兮", "辰兮要努力", "ChenXi");
     nameList.forEach(System.out::println);

思考一下这个会输出什么?
在这里插入图片描述
对就是正常的遍历输出了集合中每一个具体的对象

辰兮
辰兮要努力
ChenXi

二、案例学习

如下的两种方式其实输出是相同的

nameList.forEach(System.out::println);   

即调用了某一个对象的某一个方法

nameList.forEach(name -> {
            System.out.println(name);
        });

输出结果

辰兮
辰兮要努力
ChenXi

就是把你遍历出来的每一个对象都用来去调用System.out的println方法。

System.out::println这段代码其实就是Consumer接口的一个实现方式

在这里插入图片描述
点进去

@FunctionalInterface
public interface Consumer<T> {

    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);

    /**
     * Returns a composed {@code Consumer} that performs, in sequence, this
     * operation followed by the {@code after} operation. If performing either
     * operation throws an exception, it is relayed to the caller of the
     * composed operation.  If performing this operation throws an exception,
     * the {@code after} operation will not be performed.
     *
     * @param after the operation to perform after this operation
     * @return a composed {@code Consumer} that performs in sequence this
     * operation followed by the {@code after} operation
     * @throws NullPointerException if {@code after} is null
     */
    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

我们可以自己创建一个类来模仿System.out::println这样的输出方式

/**
 * 2021-7-25 12:01:54 
 * 辰兮要努力
 */
public class PrintlnDemo {

    /**
     * 创建一个打印的输出方法
     */
    public void printDemo(String a) {
        System.out.println(a);
    }
}

案例实践

/**
 * 2021-7-25 12:02:50
 * 辰兮要努力
 */
public class Demo {
    public static void main(String[] args) {
        // 创建出一个数组
        List<String> nameList = Arrays.asList("辰兮", "辰兮要努力", "ChenXi");
        //输出案例
        nameList.forEach(System.out::println);
        //创建一个demo模仿如上的打印输出功能
        nameList.forEach(new PrintlnDemo()::printDemo);
    }
}

输出结果
在这里插入图片描述


三、项目实践

创建一个学生类

@Data
public class Student {
    private int age;
    private String name;
}

获取list集合里面的某两个属性转换为map集合存储

/**
 * 2021-7-25 12:13:35
 * 辰兮要努力
 */
public class Demo {
    public static void main(String[] args) {

        Student student = new Student(20,"辰兮");
        Student student1 = new Student(22,"辰兮要努力");
        Student student2 = new Student(21,"ChenXi");

        ArrayList<Student> list = new ArrayList<>();
        list.add(student);
        list.add(student1);
        list.add(student2);

        //实现List转换为Map
        Map<String,Integer > map = list.stream().collect(Collectors.toMap( Student::getName,Student::getAge));
        System.out.println(map); //{ChenXi=21, 辰兮要努力=22, 辰兮=20}
      
    }
}

输出结果

{ChenXi=21, 辰兮要努力=22, 辰兮=20}

本方法的业务场景还有很多,我们根据实际的业务进行实践应用即可


分享一下相关文章:秋招Java-面试官就System.out.println()考了我半个小时?
请添加图片描述
相信你一定有所收获我们下期再见!

---

非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤️ 分享👥 留言💬thanks!!!

愿你们奔赴在自己的热爱里!

目录
相关文章
|
29天前
|
设计模式 Java
【惊天揭秘】Java编程绝技大曝光:接口、抽象类、静态类与非静态类的神秘面纱终被揭开!
【8月更文挑战第22天】Java支持面向对象编程,通过接口、抽象类、静态类(如枚举与工具类)及普通类实现设计原则。接口定义行为规范,允许多重继承;抽象类含未实现的抽象方法,需子类完成;静态类常为工具类,提供静态方法;普通类则实例化对象。恰当运用这些结构能提升程序质量。
31 2
|
1月前
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
33 1
|
22天前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
56 0
|
4天前
|
机器学习/深度学习 人工智能 安全
python和Java的区别以及特性
Python:适合快速开发、易于维护、学习成本低、灵活高效。如果你需要快速上手,写脚本、数据处理、做点机器学习,Python就是你的首选。 Java:适合大型项目、企业级应用,性能要求较高的场景。它类型安全、跨平台能力强,而且有丰富的生态,适合更复杂和规模化的开发。
14 3
|
11天前
|
安全 Java API
Java 18 概述:新特性一览
Java 18 作为 Java 平台的最新版本,引入了多项令人振奋的新特性和改进,包括模式匹配、记录类型、流库改进、外部函数与内存 API 以及并发处理增强。这些新功能不仅提升了开发者的生产力,还显著增强了 Java 的性能和安全性。本文将详细介绍 Java 18 的主要新特性,并通过代码示例帮助读者更好地理解和应用这些功能。
|
21天前
|
Java API
Java 8新特性:Lambda表达式与Stream API的深度解析
【7月更文挑战第61天】本文将深入探讨Java 8中的两个重要特性:Lambda表达式和Stream API。我们将首先介绍Lambda表达式的基本概念和语法,然后详细解析Stream API的使用和优势。最后,我们将通过实例代码演示如何结合使用Lambda表达式和Stream API,以提高Java编程的效率和可读性。
|
23天前
|
Java 开发者
Java 8新特性之Lambda表达式与函数式接口
【7月更文挑战第59天】本文将介绍Java 8中的一个重要新特性——Lambda表达式,以及与之密切相关的函数式接口。通过对比传统的匿名内部类,我们将探讨Lambda表达式的语法、使用方法和优势。同时,我们还将了解函数式接口的定义和用途,以及如何将Lambda表达式应用于函数式编程。
|
28天前
|
Java 机器人
深入探索多态的奇妙世界,揭开它作为Java中“变形金刚”的神秘面纱
深入探索多态的奇妙世界,揭开它作为Java中“变形金刚”的神秘面纱
9 1
|
1月前
|
分布式计算 Java API
Java 8带来了流处理与函数式编程等新特性,极大提升了开发效率
Java 8带来了流处理与函数式编程等新特性,极大提升了开发效率。流处理采用声明式编程模型,通过filter、map等操作简化数据集处理,提高代码可读性。Lambda表达式支持轻量级函数定义,配合Predicate、Function等接口,使函数式编程无缝融入Java。此外,Optional类及新日期时间API等增强功能,让开发者能更优雅地处理潜在错误,编写出更健壮的应用程序。
25 1
|
1月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决