文章目录

Enum的使用

switch中使用

常见方法

values() 以数组形式返回枚举类型的所有成员

ordinal() 获取枚举成员的索引位置

valueOf() 将普通字符串转换为枚举实例

compareTo() 比较两个枚举成员在定义时的顺序

枚举优点缺点

优点:

缺点:

枚举和反射

Lambda表达式

Lambda表达式的语法

语法精简

函数式接口

Lambda表达式改进Collection接口的forEach()

Lambda表达式改进List的sort()方法

Lambda表达式改进HashMap的forEach()

总结

优点:

缺点:

Enum的使用

将常量组织起来统一进行管理

场景:错误状态码,消息类型,颜色的划分,状态机等等…

本质:是 java.lang.Enum 的子类,也就是说,自己写的枚举类,就算没有显示的继承 Enum ,但是其默认继承了

这个类。

switch中使用

enum ProgramLanguage {

JAVA,

C,

PYTHON,

PHP,

GO,

}

public static void enumUse(ProgramLanguage language) {

switch (language) {

case JAVA:

System.out.println("JAVA");

break;

case C:

System.out.println("C");

break;

case GO:

System.out.println("GO");

break;

case PHP:

System.out.println("PHP");

break;

case PYTHON:

System.out.println("PYTHON");

break;

}

}

常见方法

values() 以数组形式返回枚举类型的所有成员

System.out.println(Arrays.toString(ProgramLanguage.values()));

ordinal() 获取枚举成员的索引位置

ProgramLanguage language = ProgramLanguage.JAVA;

//

System.out.println(language.ordinal());

valueOf() 将普通字符串转换为枚举实例

ProgramLanguage language1 = ProgramLanguage.valueOf("PYTHON");

System.out.println(language1);

compareTo() 比较两个枚举成员在定义时的顺序

System.out.println(language.compareTo(language1));

枚举优点缺点

优点:

枚举常量更简单安全 。 2. 枚举具有内置方法 ,代码更优雅

缺点:

不可继承,无法扩展

枚举和反射

不能通过反射获取枚举类的实例,所以枚举实现单例模式是安全的。

Lambda表达式

Lambda表达式的语法

基本语法: (parameters) -> expression 或 (parameters) ->{ statements; }

Lambda表达式由三部分组成:

paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。

->:可理解为“被用于”的意思

方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。

语法精简

参数类型可以省略,如果需要省略,每个参数的类型都要省略。

参数的小括号里面只有一个参数,那么小括号可以省略

如果方法体当中只有一句代码,那么大括号可以省略

如果方法体中只有一条语句,其是return语句,那么大括号可以省略,且去掉return关键字。

函数式接口

如果一个接口只有一个抽象方法,那么该接口就是一个函数式接口

如果我们在某个接口上声明了 @FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求

该接口,这样如果有两个抽象方法,程序编译就会报错的。所以,从某种意义上来说,只要你保证你的接口

中只有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的。

//函数式接口

@FunctionalInterface

interface NoParameterNoReturn {

void test();

}

@FunctionalInterface

interface MoreParameterReturn {

int test(int a, int b);

}

@FunctionalInterface

interface NoParameterReturn {

int test();

}

public class LambdaTest {

public static void main(String[] args) {

//

NoParameterNoReturn noReturn = () -> {

System.out.println("无参无返回值");

};

noReturn.test();

//

MoreParameterReturn moreParameterReturn = (int a,int b) -> {

return a+b;

};

int ret = moreParameterReturn.test(60,70);

System.out.println(ret);

//

NoParameterReturn noParameterReturn = () -> 100;

int ret1 = noParameterReturn.test();

System.out.println(ret1);

}

Lambda表达式改进Collection接口的forEach()

List list = new ArrayList<>();

list.add(new Student("Listen", 10, 90));

list.add(new Student("Bike", 20, 91));

list.add(new Student("Franke", 30, 92));

list.add(new Student("Linda", 40, 99));

//for each

for (Student s : list

) {

System.out.print(s + " ");

}

System.out.println();

//

list.forEach(student -> {

System.out.print(student +" ");

});

System.out.println();

Lambda表达式改进List的sort()方法

//sort()

list.sort((o1, o2) -> o2.age - o1.age);

System.out.println(list);

Lambda表达式改进HashMap的forEach()

//map

Map map = new HashMap<>();

map.put(1, "C");

map.put(2, "Java");

map.put(3, "Python");

map.put(4, "PHP");

//

for (Map.Entry entry : map.entrySet()

) {

System.out.println(entry.getKey() + "=" + entry.getValue());

}

//

map.forEach( (k, v) -> System.out.println(k + "=" + v) );

总结

Lambda表达式的优点很明显,在代码层次上来说,使代码变得非常的简洁。缺点也很明显,代码不易读。

优点:

代码简洁,开发迅速

方便函数式编程

非常容易进行并行计算

Java 引入 Lambda,改善了集合操作

缺点:

代码可读性变差

在非并行计算中,很多计算未必有传统的 for 性能要高

不容易进行调试

java枚举变量带括号_Java~如何使用Enum(枚举)和Lambda表达式相关推荐

  1. java枚举变量带括号_java枚举类型 - 墨梅的个人空间 - OSCHINA - 中文开源技术交流社区...

    public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般 ...

  2. java不带括号_java – 打印数组,不带括号和逗号

    我以前在学校为我的java课上写了一个Hangman游戏.我现在正在将其移植到Android,并遇到了一些问题.原始的java程序将所有输出写入控制台.现在我必须以某种方式对输出进行调整,使其符合我设 ...

  3. java 错误代码 返回格式_java – 不兼容的类型:lambda表达式中的错误返回类型?...

    给出以下代码: /** * Prints the grid with hint numbers. */ private void printGridHints() { minesweeperGrid. ...

  4. 【Java】反射、枚举、Lambda表达式

    一.反射 1 定义 2 用途(了解) 3 反射基本信息 4 反射相关的类(重要) 4.1 Class类(反射机制的起源 ) 4.1.1 Class类中的相关方法(方法的使用方法在后边的示例当中) 4. ...

  5. Java学习记录五(多线程、网络编程、Lambda表达式和接口组成更新)

    Java学习记录五(多线程.网络编程.Lambda表达式和接口组成更新) Java 25.多线程 25.1实现多线程 25.1.1进程 25.1.2线程 25.1.3多线程的实现 25.1.4设置和获 ...

  6. 提高Java表达能力!不落伍一起掌握Java8中Lambda表达式、函数式接口及方法构造器数组引用

    文章目录 函数式接口概述 函数式接口示例 内置函数式接口 Lambda简述 Lambda语法 方法引用 构造器引用 数组引用 函数式接口概述 只包含一个抽象方法的接口,称为函数式接口. 可以通过 La ...

  7. 项目中使用 java函数式编程_函数式编程在Java8中使用Lambda表达式进行开发

    事情起因 如果不喜欢看故事的同学,请前往下一章节. 事情起因是我打算集成Redis缓存,配置了Redis以后,发现@Cacheable注解始终不生效,折腾了大半天以后,我的心态已经崩了,决定不使用@C ...

  8. java正则匹配括号_java正则表达式方括号匹配的认识

    在java正则表达式的学习中,方括号匹配是一个重点,在这里为了让学员们对方括号匹配这个知识点有更深刻的认识和了解,广州达内的老师将为你进行一次深刻的讲解. 在正则表达式中,[]是对指定的元素进行匹配, ...

  9. java 自带观察者模式_java 内置的观察者模式

    1.可观察的对象 public class PurchaseDate extends Observable { private int Id; private String orderNumber; ...

最新文章

  1. h5的fetch方法_你不需要jQuery(三):新AJAX方法fetch()
  2. Spring的两种动态代理:Jdk和Cglib 的区别和实现
  3. 图像连通域标记算法研究
  4. HDU 5652 India and China Origins(二分 + BFS)
  5. 使用Sonatype Nexus搭建Maven镜像的几点注意事项
  6. vue2.0中组建里面套用组件_vue2.0如何嵌套组件
  7. jupyter notebook OSError: [WinError 10049] 在其上下文中,该请求的地址无效。
  8. css3禅密花园叫什么名字_CSS秘密花园:灵活的椭圆形
  9. Cocoa教学:Windows OOP与Cocoa MVC之对比
  10. Windows Phone上的相机景深计算器
  11. Intel CPU平台和架构介绍
  12. elementui el-dialog 离顶部的位置_人眼距离屏幕合适位置该怎么算?
  13. 深信服应用交付(AD)学习笔记
  14. 使用Comsol完成固体火箭装药的燃面推移
  15. Code Project
  16. ubuntu18.04 | soundfile安装报错与解决
  17. 传智播客风清扬视频-------线程简介
  18. 奥斯汀页眉怎么设置_word奥斯汀样式页眉怎么下拉
  19. 苹果上的Http Live Stream(HLS)技术初探
  20. 自助任务平台小项目感想

热门文章

  1. JavaScript新鲜事·第6期
  2. 深入理解javascript选择器API系列第二篇——getElementsByClassName
  3. Powershell RESTAPI 访问Office365
  4. socket select模型
  5. 为什么世界上一些最好的科学家和程序员,在世人眼里,都有点不太正常,甚至行为混乱...
  6. 【原创】Kakfa utils源代码分析(二)
  7. Windows 7新睹为快!!
  8. 高校促进“智慧城市”信息化建设策略研究
  9. js——全选框 checkbox
  10. zenoss core