System.out::println解读
System.out::println解读
个人总结:首先调用System里的Out类掉用plintln方法,会有一个参数传进去,就是foreach的其中一个,然后方法里会去打印这个参数
创建出一个数组
List<String> strList = Arrays.asList("liYahui", "Yahui", "hui");
strList.forEach(System.out::println);
第一印象, 哇, 好高大上的写法, 那么这究竟是怎样的一种语法呢。
我们一步一步来探究:
首先, 我们看一下是java.lang.Iterable<T>
下的一个默认方法forEach
调用的, 好家伙, 一看到这个function包下面的被@FunctionalInterface
注解声明的Consumer<T>
接口, 瞬间就了然了, 这不又是函数式编程搞的鬼么?(如果大家不理解什么是函数式编程, 可以去看看我的一篇博客 —— 深入浅出讲解Optional包装类, 里面有详细的介绍和代码 )。
现在的问题应该很明朗了, System.out::println
这段代码其实就是Consumer<T>
接口的一个实现方式啊。 具体是怎么实现的, 我们再码一段代码。
@Test
public void testDemo2() {List<String> strList = Arrays.asList("YangHang", "AnXiaoHei", "LiuPengFei");strList.forEach(x -> {System.out.println(x);});
}
然后, 我们惊喜的发现和上面的代码运行结果是一制的, 我们基本上可以断定, 上面那种写法是下面这种的一种缩写形式。 就是把你遍历出来的每一个对象都用来去调用System.out(也就是PrintStream类的一个实例)的println方法。
最后, 大家是不是有一个想法, 想自己写一个Consumer接口的实现类, 让foreach调用一下。
/*** 打印加强处理类* <p>* * @author YangHang* @Date 2018年12月9日 下午12:25:30**/
public class PrintUtil {/*** 对要遍历的元素添加add操作*/public void addString(String x) {System.out.println(x + "add");}
}
然后, 我们这么来玩
@Test
public void testDemo3() {List<String> strList = Arrays.asList("YangHang", "AnXiaoHei", "LiuPengFei");strList.forEach(new PrintUtil()::addString);
}
运行一下, 果然可以。
但是我发现, 如果是静态方法的时候必须得用类名双冒号静态方法, 这估计是语法的一种, 发夹注意就好。
个人总结:首先调用System里的Out类掉用plintln方法,会有一个参数传进去,就是foreach的其中一个,然后方法里会去打印这个参数
System.out::println解读相关推荐
- 求求你别再用 System.out.println 了!!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:my.oschina.net/yuchener/bl ...
- 深入研究 System.out.println()
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源: 1t.click/k87 什么是System.out ...
- 最重要的事情 一 、消息通信机制(1)ant 打包方法(2) system.out.println()用法 二、UML学习
最重要的事情 一 .消息通信机制(1)ant 打包方法(2) system.out.println()用法 二.UML学习
- 居然还有人在用 System.out.println打日志的吗?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 雨尔辰辰 来源 | my.oschina.ne ...
- IntelliJ中的main函数、for循环、System.out.println()快捷键
main函数 输入: psvm 回车 输出: public static void main(String[] args) {} for循环 输入:fori 回车 输出: for (int i = 0 ...
- java中的System.out.print()与System.out.println()的区别
System.out.print();与System.out.println(); 前者输出不换行,比如: System.out.print("a"); System.out.pr ...
- java中system.out.println()是什么意思【笔记自用】
在Java编程中,我们常常用System.out.println()方法来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢? 这里就涉及用到一个stat ...
- 字节一面,面试官拿 System.out.println() 考了我半个小时?我傻了
前言 之前春招面试我被问及,你如何理解System.out.println() ? 今天我就来给大家分享一下! 学了这么久的面向对象编程,那如何用一行代码体现呢? 如果你能自己读懂System.out ...
- java logfaction_Java调试的变迁:从System.out.println到log4j
jungleford如是说 用惯了VC的人刚接触Java大概很不习惯代码的调试,的确,在M$的大部分IDE都做得相当出色,包括像VJ++这样一直被Java程序员称为是"垃圾" ...
最新文章
- blender硬表面建模渲染终极教程
- SpringBoot自定义错误页面
- ASP.NET Core Web APi获取原始请求内容
- python正则表达式知识点
- java util map,我应该如何命名java.util.Map?
- 中国消费者为何不愿为App付费?
- 网络流之最大流算法(EdmondsKarp)
- 专业App开发:设计App图标的三个关键点
- Android使用adb命令查看CPU信息
- 手机移动端浏览器或PC端浏览器莫名出现计算错误或莫名返回到登录界面等问题的解决.
- oracle异步sql,Oracle sqlplus登陆异步io错误
- SpringApplication.run方法分析
- JavaScript教程带你快速入门
- 【java学习】多线程之高并发编程
- cnpm 安装yarn
- 头脑极度开放:前额皮层大战杏仁核
- knife4j文档-个人笔记
- Android程序的入口
- [ CTF ]【天格】战队WriteUp-2022年第二届“长城杯”网络安全大赛
- 《写给大家看的设计书》《写给大家看的色彩书》《点石成金》《形式感》学习笔记...
热门文章
- n1 openwrt 挂载u盘_openwrt 挂载U盘/硬盘+交换分区
- P2P如何实现内网穿透(打洞)
- 电脑IOS模拟器用逍遥模拟器电脑上玩部分手游和苹果手机互通
- 服务器登录账号不能切换,切换LDAP服务器后用户无法登陆
- java 断言assert_java断言assert的使用
- 单反数码相机存储卡数据恢复
- Mac中用Excel导入csv文件出现乱码
- 探索制造业供应链的嬗变之道,加快布局柔性供应链基础设施
- xp桌面计算机隐藏设置方法,XP系统桌面右下角隐藏图标不见了,怎么调出来?
- jetbrains Rider使用