【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!!!

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

目录
相关文章
|
4月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
Java API 开发者
145 0
|
6月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
275 2
|
6月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
686 0
|
6月前
|
缓存 安全 Java
Java 并发新特性实战教程之核心特性详解与项目实战
本教程深入解析Java 8至Java 19并发编程新特性,涵盖CompletableFuture异步编程、StampedLock读写锁、Flow API响应式流、VarHandle内存访问及结构化并发等核心技术。结合电商订单处理、缓存系统、实时数据流、高性能计数器与用户资料聚合等实战案例,帮助开发者高效构建高并发、低延迟、易维护的Java应用。适合中高级Java开发者提升并发编程能力。
185 0
|
6月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
292 1
|
6月前
|
IDE Java API
Java 17 新特性与微服务开发的实操指南
本内容涵盖Java 11至Java 17最新特性实战,包括var关键字、字符串增强、模块化系统、Stream API、异步编程、密封类等,并提供图书管理系统实战项目,帮助开发者掌握现代Java开发技巧与工具。
316 1
|
6月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
191 2