今天無意間看到了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; }
}
還挺好玩的,有些事就不說了啊,大家都懂的