天天看點

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; }

}

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