高效 告别996,开启java高效编程之门 2-10实战:自定义函数式接口
Posted 扈江离与辟芷兮,纫秋兰以为佩。
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高效 告别996,开启java高效编程之门 2-10实战:自定义函数式接口相关的知识,希望对你有一定的参考价值。
1 有用部分
2 代码演练
1 有用部分
个人理解:
1.1 关于lambda的应用
通过 @FunctionalInterface注解 将其参数 fileContent 注入,调用的时候可以直接调取到。
服务层通过直接调用接口的方法,没有用实现类
1.2 关于文件流的读取操作
demo中设计更多的流的读取的操作
2 代码演练
需求:
将本地文件打印出来
接口:
package com.imooc.zhangxiaoxi.lambda.file; /** * 接口中只有一个抽象方法,可以应用lambda表达式 * * 加入注解 * * 文件处理函数式接口 */ @FunctionalInterface public interface FileConsumer { /** * 函数式接口抽象方法 * @param fileContent */ void fileHandler(String fileContent); }
文件服务类:
package com.imooc.zhangxiaoxi.lambda.file; import java.io.*; /** * 文件服务类 */ public class FileService { /** * 根据url获取文件,打印文件内容 */ public void print(String url,FileConsumer fileConsumer) throws IOException { //流读取 BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( new FileInputStream(url))); //定义行变量和内容sb String line = ""; StringBuilder stringBuilder = new StringBuilder(); //循环读取文件内容 while((line=bufferedReader.readLine())!=null){ stringBuilder.append(line+" "); } //调用函数式接口方法,将文件内容传递给lambda表达式 fileConsumer.fileHandler(stringBuilder.toString()); } }
文件测试类:
package com.imooc.zhangxiaoxi.lambda.file; import org.junit.Test; import java.io.IOException; public class FileServiceTest { @Test public void Test() throws IOException {
//两种方式
//1.2 FileService fileService = new FileService(); fileService.print("F:/xiangmu3/Xin/test996/src/test/java/com/imooc/zhangxiaoxi/" + "lambda/file/FileServiceTest.java", fileContent -> { System.out.println(fileContent); }); //1.1 /*FileService fileService = new FileService(); fileService.print("F:/xiangmu3/Xin/test996/src/test/java/com/imooc/zhangxiaoxi/" + "lambda/file/FileServiceTest.java", fileContent -> System.out.println(fileContent));*/ } }
打印日志:
D:javajdkjdk9jdk-9+181_windows-x64_rijava-se-9-rijdk-9injava.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4libidea_rt.jar=30991:D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4in" -Dfile.encoding=UTF-8 -classpath "D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4libidea_rt.jar;D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4pluginsjunitlibjunit-rt.jar;D:javadevolopKitideaanZhIntelliJ IDEA Community Edition 2018.1.4pluginsjunitlibjunit5-rt.jar;F:xiangmu3Xin est996 arget est-classes;F:xiangmu3Xin est996 argetclasses;F:xiangmu3Xin est996libcomgoogleguavaguava28.2-jreguava-28.2-jre.jar;F:xiangmu3Xin est996libcomgoogleguavafailureaccess1.0.1failureaccess-1.0.1.jar;F:xiangmu3Xin est996libcomgoogleguavalistenablefuture9999.0-empty-to-avoid-conflict-with-guavalistenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;F:xiangmu3Xin est996libcomgooglecodefindbugsjsr3053.0.2jsr305-3.0.2.jar;F:xiangmu3Xin est996liborgcheckerframeworkchecker-qual2.10.0checker-qual-2.10.0.jar;F:xiangmu3Xin est996libcomgoogleerrorproneerror_prone_annotations2.3.4error_prone_annotations-2.3.4.jar;F:xiangmu3Xin est996libcomgooglej2objcj2objc-annotations1.3j2objc-annotations-1.3.jar;F:xiangmu3Xin est996libjunitjunit4.12junit-4.12.jar;F:xiangmu3Xin est996liborghamcresthamcrest-core1.3hamcrest-core-1.3.jar;F:xiangmu3Xin est996libcomalibabafastjson1.2.58fastjson-1.2.58.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.imooc.zhangxiaoxi.lambda.file.FileServiceTest,Test package com.imooc.zhangxiaoxi.lambda.file; import org.junit.Test; import java.io.IOException; public class FileServiceTest { @Test public void Test() throws IOException { //1.2 FileService fileService = new FileService(); fileService.print("F:/xiangmu3/Xin/test996/src/test/java/com/imooc/zhangxiaoxi/" + "lambda/file/FileServiceTest.java", fileContent -> { System.out.println(fileContent); }); //1.1 /*FileService fileService = new FileService(); fileService.print("F:/xiangmu3/Xin/test996/src/test/java/com/imooc/zhangxiaoxi/" + "lambda/file/FileServiceTest.java", fileContent -> System.out.println(fileContent));*/ } } Process finished with exit code 0
以上是关于高效 告别996,开启java高效编程之门 2-10实战:自定义函数式接口的主要内容,如果未能解决你的问题,请参考以下文章
高效 告别996,开启java高效编程之门 3-1流式编程开场与案例场景概述
高效 告别996,开启java高效编程之门 3-23汇总操作实战案例