初识JAVA---Lambda表达式和其他(6)

Lambda表达式基本写法

      (参数)->结果

        如(String s)->s.length()

        如  x->x*x

        如 ()->{System.out.println("aaa");}

大体上相当于其他语言的“匿名函数”或“函数指针”

在java中它实际上是”匿名类的一个实例“

原来写法
Runnable dolt=new Runnable(){
    public void run(){
        System.out.println("aaa");
    }
};
new Thread(dolt).start();


lambda表达式
后来写法
Runnable dolt=()->System.println("aaa");
new Thread(dolt).start();

lambda表达式本质上和原来写法一样,是匿名类的一个对象实例
用lambda表达式后就可以写的简单,甚至可以写的更简单一点
new Thread(()->System.out.println("aaa")).start();
有了lambda表达式可以把匿名类、对象写的更简单。

Lambda表达式时接口或者说是接口函数的简写

其基本写法是  参数->结果

这里参数是()或1个或多个参数

结果是指表达式或语句或{语句}

求积分
interface Fun{double fun(double x);}
double d=Integral(new Fun(){
    public double fun(double){
        return Math.sin(x);
        }
},0,Math.PI,1e-5);

用lambda表达式
double d=Intergral(x->Math.sin(x),0,Math.PI,1e-5);

Lambda大大简化了书写

在线程例子中  

   new Thread(()->{...}).start();

在积分例子中

  d=Integral(x->Math.sin(x),0,1,EPS);

  d=Integral(x->x*x,0,1,EPS);

  d=Integral(x->1,0,1,EPS);

Lambda只能表示一个函数

能写成Lambda的接口 要求包含最多只能由一个抽象函数

这样的接口可以用来注计

 @FunctionalInterface来表示,称为函数式接口

如 @FunctionalInterface

interface Fun{double fun(double(x);}

Comparator<Person>compareAge=(p1,p2)->p1.age-p2.age;
Arrays.sort(people,compareAge);
Arrays.sort(people,(p1,p2)->p1.age-p2.age);
Arrays.sort(people,(int)(p1.score-p2.score));
Arrays.sort(people,(p1,p2)->p1.name.compareTo(p2.name));
Arrays.sort(people,(p1,p2)->-p1.name.compareTo(p2.name));
分别是按照年龄,分数,姓名,进行排序

 

装箱、枚举、注解

基本类型的包装类

       他将基本类型包装成Object(引用类型)  因为有些时候,接口时引用类型的所以要包装一下

       如  int 变成 Interger

       共8类:Boolean、Byte、Short、Character、Integer、Long、Float、Double

Integer I=new Integer(10);//将int类型转换成引用类型 ,但每次这样挺麻烦的   所有由装箱,拆箱

装箱:Integer=10;  拆箱:int i=I;实际上(Integer I=Integer.valueOf(10);     int i=I.intValue();)

主要方便应用于集合中,Object[]ary={1,"aaa"}

 

枚举(enum)时一种特殊的class类型

在简单的情况下,用法和其他语言的enum相似

enum Light{Red,Yellow,Green};

Light light=Light.Red;

但实际上,它生成了 class Light extends java.lang.Enum

可以在enum定义体中,添加字段、方法、构造方法

enum Direction{
    EAST("东",1),SOUTH(”南“,2),WEST("西",3),NORTH("北",4);
    private Direction(String desc,int num){
        this.desc=desc;this.num=num;
    }
    private String desc;
    private int num;
    public String getDesc(){return desc;}
    public int getNum(){return num;}
}

注解,又称为注记、标记、标注、注释   不同于comments,是在各种语法要素上加上附加信息,以供编译器或其他程序使用

所有的注解都是  java.lang.annotation.Annotation的子类

常用的注解

@Override 表示覆盖父类的方法
@Deprecated  表示过时的方法
@SuppressWarnings  表示让编译器不产生警告
自定义注解   比较复杂
public @interface Author{
    String name();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值