草庐IT

读Java8函数式编程笔记04_类库

躺柒 2023-04-16 原文

1. 默认方法

1.1. 接口中定义的包含方法体的方法,方法名有default关键字做前缀

1.1.1. 在任何接口中,无论函数接口还是非函数接口,都可以使用该方法

1.2. Collection接口

1.2.1. stream方法

1.3. Iterable接口

1.3.1. forEach方法

1.4. 虚方法

1.5. 类中重写的方法优先级高于接口中定义的默认方法

1.5.1. 能简化很多继承问题

1.5.2. 任何时候,一旦与类中定义的方法产生冲突,都要优先选择类中定义的方法

1.5.3. 如果类中重写的方法没有默认方法的优先级高,那么就会破坏已有的实现

1.5.4. 为了在接口上向后兼容

2. 接口的静态方法

2.1. Stream.of

2.2. Stream.range

2.3. Stream.iterate

3. 改变了人们认识类库的方式,接口中的方法也可以包含代码体

4. 函数接口的方法

4.1. 使用Predicate,调用test方法

4.2. 使用Function,调用apply方法

5. 基本类型

5.1. int

5.2. 内建在语言和运行环境中

5.3. 基本的程序构建模块

6. 装箱类型

6.1. Integer

6.2. 普通的Java类

6.3. 对基本类型的一种封装

7. 在最坏的情况下,同样大小的数组,Integer[]要比int[]多占用6倍内存

8. 装箱

8.1. 将基本类型转换为装箱类型

9. 拆箱

9.1. 将装箱类型转换为基本类型

10. Stream类特殊处理的基本类型

10.1. IntStream

10.2. DoubleStream

10.3. LongStream

10.4. summaryStatistics方法

10.4.1. min

10.4.2. max

10.4.3. average

10.4.4. sum

11. BinaryOperator

11.1. 一种特殊的BiFunction类型

11.2. 参数的类型和返回值的类型相同

12. 目标类型推导规则

12.1. 如果只有一个可能的目标类型,由相应函数接口里的参数类型推导得出

12.2. 如果有多个可能的目标类型,由最具体的类型推导得出

12.3. 如果有多个可能的目标类型且最具体的类型不明确,则需人为指定类型

13. @FunctionalInterface

13.1. 每个用作函数接口的接口都应该添加这个注释

13.2. Java中有一些接口,虽然只含一个方法,但并不是为了使用Lambda表达式来实现的

13.3. 关闭资源是更改状态的另一种形式

13.4. 该注释添加给一个枚举类型、类或另一个注释,或者接口包含不止一个抽象方法,javac就会报错

13.4.1. 重构代码时,使用它能很容易发现问题

14. 多重继承

14.1. 使用super关键字是指向父类

14.2. InterfaceName.super这样的语法指的是继承自父接口的方法

15. 三定律

15.1. 类胜于接口。如果在继承链中有方法体或抽象的方法声明,那么就可以忽略接口中定义的方法

15.1.1. 为了让代码向后兼容

15.2. 子类胜于父类。如果一个接口继承了另一个接口,且两个接口都定义了一个默认方法,那么子类中定义的方法胜出

15.3. 如果上面两条规则不适用,子类要么需要实现该方法,要么将该方法声明为抽象方法

16. 接口和抽象类的区别

16.1. 接口允许多重继承,却没有成员变量

16.2. 抽象类可以继承成员变量,却不能多重继承

17. Optional

17.1. 在一个值可能为空的建模情况下,使用Optional对象能替代使用null值

17.2. 为核心类库新设计的一个数据类型,用来替换null值

17.2.1. 使用null代表值不存在的最大问题在于NullPointerException

17.3. Optional对象鼓励程序员适时检查变量是否为空,以避免代码缺陷

17.4. 它将一个类的API中可能为空的值文档化,这比阅读实现代码要简单很多

17.5. 方法

17.5.1. get

17.5.2. orElse

17.5.2.1. 当Optional对象为空时,该方法提供了一个备选值

17.5.3. orElseGet

17.5.3.1. 接受一个Supplier对象,只有在Optional对象真正为空时才会调用

17.5.4. empty

17.5.5. ofNullable

17.5.5.1. 将一个空值转换成Optional对象

17.5.6. isPresent

17.5.6.1. 一个Optional对象里是否有值

有关读Java8函数式编程笔记04_类库的更多相关文章

  1. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  2. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  3. ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词 - 2

    我正在尝试用ruby​​中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了

  4. ruby - 在 Ruby 中有条件地定义函数 - 2

    我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin

  5. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  8. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  9. ruby - 在 Ruby 中按名称传递函数 - 2

    如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

  10. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

随机推荐