今天无意间看到了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; }
}
还挺好玩的,有些事就不说了啊,大家都懂的