今天无意间看到了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; }
}


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

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐