路由器设置用来做网站空间吗,国内有名室内设计公司,房产交易中心官网,wordpress 总变量2019独角兽企业重金招聘Python工程师标准 Oracle号称今年一定发布jdk8, 即使有bug, jdk8无疑最大的宠儿就是lambda表达式了#xff0c;还是直接上代码#xff0c;看看lambda表达式怎么了。 环境#xff1a; openjdk8, eclipse4.3.1(支持jdk8编译) 实例代码 Oracle号称今年一定发布jdk8, 即使有bug, jdk8无疑最大的宠儿就是lambda表达式了还是直接上代码看看lambda表达式怎么了。 环境 openjdk8, eclipse4.3.1(支持jdk8编译) 实例代码 // Demo1
public class RunnableTest {public static void main(String[] args) {Runnable runner () - System.out.println(I am lambda runner.);runner.run();}
} // Demo2
import javax.swing.JButton;public class ListenerTest {public static void main(String[] args) {JButton btn new JButton();btn.addActionListener(e - System.out.println(Event Source is: e.getSource()));}
} // Demo3
//Student.java
public class Student {private String name;private float score;public Student(String name, float score) {this.name name;this.score score;}public String getName() {return name;}public void setName(String name) {this.name name;}public float getScore() {return score;}public void setScore(float score) {this.score score;}Overridepublic String toString() {return Student [name name , score score ];}
}// ComparatorTest.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;public class ComparatorTest {public static void main(String[] args) {ListStudent students new ArrayList();Random r new Random();for (int i0; i5; i){students.add(new Student(stui, r.nextFloat() * 100));}Collections.sort(students, (Student s1, Student s2) - (int)(s1.getScore() - s2.getScore()));for (Student s: students){System.out.println(s);}}
} 看了这3个例子就会觉得lambda很偏向于函数式编程(如Lisp这种语言)这种语言很简洁但是易读性不是那么好没办法又想简洁又想易读式不太容易的以前java有匿名类我们通常就实现这个匿名类里的一个接口这叫Function Interface现在我们就可以不用写这个匿名类了就直接实现接口就行了就像上面的Demo一样。 下面说一下lambda在Collection上的工作 Function接口: public interface FunctionT, R {R apply(T t);...
} Function接受一种类型T输入以另一类型R输出, 看实例 import java.util.function.Function;public class Person {private String firstName;private String lastName;private int age;public Person(String firstName, String lastName){this.firstName firstName;this.lastName lastName;}public Person(String firstName, String lastName, int age) {this.firstName firstName;this.lastName lastName;this.age age;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName lastName;}public int getAge() {return age;}public void setAge(int age) {this.age age;}/*** 这里就用Function实现可订制的信息输出* Function: 将输入类型转换为输出类型这里即将Person输入以String输出*/public String printCustom(FunctionPerson, String f){return f.apply(this);}
} 测试用例 import java.util.function.Function;/*** Function 测试*/
public class FunctionTest {public static void main(String[] args) {Person person new Person(Hello, Function);// 用lambda表达式作为参数传递System.out.println(person.printCustom(p - FirstName : p.getFirstName()));// 用lambda表达式构建Function对象FunctionPerson, String westernStyle p - {return LastName: p.getLastName() , FirstName: p.getFirstName();};FunctionPerson, String eastStyle p - {return FirstName: p.getFirstName() , LastName: p.getLastName();};System.out.println(person.printCustom(westernStyle));System.out.println(person.printCustom(eastStyle));}
} 输出结果 集合的迭代 import java.util.ArrayList;
import java.util.List;/*** 通过lambda迭代集合*/
public class LoopTest {public static void main(String[] args) {ListPerson ps new ArrayList();for (int i0; i5; i){ps.add(new Person(XXi, OOi));}ps.forEach(p - System.out.println(p.getFirstName()));//ps.forEach(Person::printEast);System.out.println(-------------------------);ps.forEach(p - {System.out.println(p.printCustom(r-r.getLastName() r.getFirstName()));});}
} Predicate接口它接受一种输入类型并通过test接口方法返回boolean值 public interface PredicateT {boolean test(T t);...Predicate可以有效实现集合过滤操作 测试用例 /*** Predicate实现集合过滤*/
public class PredicateTest {public static void main(String[] args) {ListPerson ps new ArrayList();Random r new Random();for (int i0; i10; i){ps.add(new Person(firstNamei, lastNamei, r.nextInt(20) 1));}PredicatePerson children p - p.getAge() 12;PredicatePerson teenagers p - p.getAge() 12 p.getAge() 18;PredicatePerson adults p - p.getAge() 18;for (Person p : ps){System.out.print(p.getFirstName() s age is p.getAge());if (children.test(p)){System.out.println(, is a child.);} else if (teenagers.test(p)){System.out.println(, is a teenager.);} else if(adults.test(p)){System.out.println(, is an adult.);}}}
} 输出结果 2个综合些的例子 import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.function.Predicate;
import java.util.stream.Collectors;public class CollectTest {public static void main(String[] args) {ListPerson ps new ArrayList();Random r new Random();for (int i0; i10;i){ ps.add(new Person(firstnamei, lastnamei, r.nextInt(30) 1));}// 过滤条件18岁PredicatePerson adults p - p.getAge() 18;// 通过collect获取过滤后的集合ListPerson filteredPersons ps.stream().filter(adults).collect(Collectors.toList());filteredPersons.forEach(p - System.out.println(p.getFirstName() p.getLastName()s age: p.getAge()));}
} import java.util.ArrayList;
import java.util.List;
import java.util.OptionalDouble;
import java.util.OptionalInt;
import java.util.Random;
import java.util.function.Predicate;/*** 通过map来实现求最大值平均值*/
public class MapTest {public static void main(String[] args) {ListPerson ps new ArrayList();Random r new Random();for (int i0; i10;i){ ps.add(new Person(firstnamei, lastnamei, r.nextInt(30) 1));}// 过滤条件18岁PredicatePerson adults p - p.getAge() 18;//最大年龄OptionalInt maxAge ps.parallelStream().filter(adults).mapToInt(p - p.getAge()).max();System.out.println(最大年龄 maxAge.getAsInt());// 求18岁以上的平均值OptionalDouble average ps.parallelStream().filter(adults).mapToDouble(p - p.getAge()).average();System.out.println(平均年龄 average.getAsDouble());}
} 收工。 转载于:https://my.oschina.net/indestiny/blog/196347