天天看点

JDK1.8之Lambda

今天无意间看到了JDK1.8的新特性--Lambda

然后小试了一下

在实现接口引用时

发现

在1.8以下不支持

在匿名内部类中引用外部变量

但是1.8中已经可以了

不使用Lambda技术也可以使用,

int a=0;

new Runnable(){

public void run(){

System.out.println("a="+a);

}

}.run();

这在1.8中是可以运行的,

在1.8一下是不可以的

不是说一定要使用

int a=0;

Runnable r=()->{

System.out.println("a="+a);

};

r.run();

Lambda表达式才可以使用外部的变量,算是1.8的一个改进吧

顺便玩了一下lambda与stream结合

public class TestLambda_List {

public static void main(String[] args) {

List<Person> list=arrayPerson();

list.stream().forEach(

p->System.out.println(p.toString())

);

System.out.println("*************Stream过滤**************");

list.stream().filter(p->p.getSex().equals(Person.Sex.WOMAN)).forEach(

p->System.out.println(p.toString())

);

}

static List<Person> arrayPerson(){

List<Person> list = new ArrayList<Person>();

Person p = new Person("波多野结衣", 30, Person.Sex.WOMAN);

list.add(p);

p = new Person("北条麻妃", 40, Person.Sex.WOMAN);

list.add(p);

p = new Person("大桥未久", 31, Person.Sex.WOMAN);

list.add(p);

p = new Person("莲美恋", 28, Person.Sex.WOMAN);

list.add(p);

p = new Person("Julia", 29, Person.Sex.WOMAN);

list.add(p);

p = new Person("加藤鹰", 35, Person.Sex.MAN);

list.add(p);

return list;

}

}

class Person {

public static enum Sex { MAN, WOMAN; }

private String name;

private int age;

private Sex sex;

public String toString() { return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]"; }

public Person(String name, int age, Sex sex) {

super();

this.name = name;

this.age = age;

this.sex = sex;

}

public Person() {}

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public int getAge() { return age; }

public void setAge(int age) { this.age = age; }

public Sex getSex() { return sex; }

public void setSex(Sex sex) { this.sex = sex; }

}

还挺好玩的,有些事就不说了啊,大家都懂的